【问题标题】:Why does Mojolicious nest my routes?为什么 Mojolicious 会嵌套我的路线?
【发布时间】:2012-07-20 09:07:49
【问题描述】:

我的 Mojolicious 应用程序有一些自定义身份验证机制,我在称为 auth_permission 的路由条件中实现了该机制:

$app->add_condition(auth_permission => sub {
    return is_user_allowed(...) ? 1 : 0;
});

所以我的路线看起来像这样:

my $r = $app->routes;

$r->get('/prefs')
    # no permission necessary here
  ->to(...);

$r->get('/objects')
  ->over(auth_permission => 'view objects')
  ->to(...);

$r->get('/objects/delete/:id')
  ->over(auth_permission => 'delete objects')
  ->to(...);

to() 子句处理正确:GET /objects 给我对象列表,GET /objects/delete/42 删除对象 42。

问题是两个请求都检查了权限view objects,即使第二个路由应该检查权限delete objects

原因似乎是/objects/delete/42/objects 下面的路径。路由/prefs 不会出现同样的问题,它与其他路由没有共同的基础。

我当前的解决方法是将/objects 的规则放在下面 用于/objects/delete/:id 的规则,但这是a) 不优雅并且b) 当另一个开发人员编辑文件时会中断。我可以显式禁用在这种情况下看到的嵌套行为吗?

【问题讨论】:

  • 这对我来说似乎是非常直接的行为。您所谓的解决方法是 Mojolicious 如何匹配路由的逻辑结果。 IMO 你回答了你的问题。

标签: perl mojolicious


【解决方案1】:

Mojolicious 文档似乎表明您应该从处理较短路径的对象构建扩展路径。请参阅文档的 Nested Routes 部分。

这意味着你有一个 $objects 路由,以及一个从它派生的 $objects_delete 路由。消除了排序问题(除了必须先声明较短的路线)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多