我有两个路由:
$auth = $r->under( &auth );
$auth->get( "/test", { level => 'user' } )->to( "C#A1" );
$auth->get( "/secure", { level => 'admin' } )->to( "C#A2" );
我使用under
检查访问级别。但是,当auth
子例程称为{Level}值时。{Level}仅在操作中可用。
如何更好地传递到目标路由的用户级别?
我找到了答案。我应该使用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*
]
做到这一点的另一种方法是使级别是一个独立的子,将级别设置并用于路由。
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
。不确定这是否是您要寻找的。