【发布时间】:2012-08-09 15:48:59
【问题描述】:
我有以下代码:
$r->find('user')->via('post')->over(authenticated => 1);
鉴于该路线,我可以通过经过身份验证的检查到达用户路线 这是使用 Mojolicious::Plugin::Authentication 设置的。
我想在该路线上添加另一个“over”。
$r->find('user')->via('post')->over(authenticated => 1)->over(access => 1);
不过,这似乎覆盖了经过身份验证的“结束”。
我尝试使用以下名称分解路线:
my $auth = $r->route('/')->over(authenticated => 1)
->name('Authenticated Route');
$access = $auth->route('/user')->over(access => 1)->name('USER_ACCESS');
但这根本不起作用。两个 'over' 都没有被访问。
我的路由是 /user、/item 之类的东西,使用 MojoX::JSON::RPC::Service 设置。 所以,我没有像 /user/:id 这样的东西来设置子路由。(不确定是否重要) 所有路由都像 /user,带参数发送。
我的情况如下:
$r->add_condition(
access => sub {
# do some stuff
},
);
也就是$r->route('/user')->over(access => 1)中的'access';
简而言之,使用时路由可以正常工作:
$r->find('user')->via('post')->over(authenticated => 1);
但我无法添加第二条路线。
那么,在设置这些具有多个条件的路线时,我缺少什么? 是否可以将多个条件添加到单个路由/route_name?
【问题讨论】:
-
我在实施 RBAC 时注意到了同样的事情。我希望基于特权的访问授权表现得像一棵树,这意味着链接。没有成功。我想这就是为什么他们给了我们桥梁。 :)
-
我的问题是我在“add_condition”路由修饰符中有路由,如我上面的代码所示。所以,我无法与他们沟通。我想我可以将条件移动到一个模块中,作为一个函数,并使用一个桥接器。实际上,我将它放在了 before_dispatch 钩子中。
标签: perl mojolicious