为什么Mojolicious筑巢我的路线?
问题描述:
我Mojolicious的应用程序有一些自定义的认证机制,这是我在路由条件实现所谓auth_permission
:为什么Mojolicious筑巢我的路线?
$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
,但这是一个)unelegant和为b)去当另一家开发商编辑该文件打破。我能否明确禁用在这种情况下看到的嵌套行为?
答
Mojolicious文档似乎表明您应该建立处理较短的对象的扩展路线。见Nested Routes节的文档中。
这意味着你有一个$对象路线,和$ objects_delete路线从它派生。消除排序问题(除了首先声明较短的路线)。
这看起来非常简单的行为给我。而你所谓的解决方法是Mojolicious如何匹配路线的逻辑结果。海事组织你回答你的问题。 – 2012-07-20 09:28:40