为什么 Mojolicious 嵌套我的路线?

问题描述 投票:0回答:1

我的 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) 当其他开发人员编辑文件时会中断。我可以明确禁用本例中出现的嵌套行为吗?

perl mojolicious
1个回答
1
投票
Mojolicious 文档似乎表明您应该从处理较短路径的对象构建扩展路径。请参阅文档的

嵌套路由部分。

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

© www.soinside.com 2019 - 2024. All rights reserved.