【发布时间】: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