我有两条路线:
$auth = $r->under( \&auth );
$auth->get( "/test", { level => 'user' } )->to( "C#A1" );
$auth->get( "/secure", { level => 'admin' } )->to( "C#A2" );
我使用under
来检查访问级别。但是当调用auth
子例程时,它还没有{level}值。
{level}仅在行动时可用。
如何更好地传递到& auth功能所需的目标路由用户级别?
答案 0 :(得分:4)
我找到了答案。我应该使用stack
方法:
sub auth {
...
return 1 if $c->match->stack->[-1]{ level } <= $user->level;
}
它包含:
[
{ api => 1, cb => sub { ... } }, # stash at &auth
{ api => 1, cb => sub { ... }, level => "user" }, # stash at &C#A*
]
答案 1 :(得分:0)
另一种方法是让level成为一个单独的sub来设置级别并将其用于路由。
my $user = $r->under('/user' )->to('auth#check_user' );
my $admin = $r->under('/admin')->to('auth#check_admin');
$user ->get("/test" )->to("C#A1");
$admin->get("/secure")->to("C#A2");
此示例的路由为/user/test
和/admin/secure
。不确定这是否是您正在寻找的。 p>