如何将其他参数传递给莫约利奇的“子例程”下



我有两个路由:

$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。不确定这是否是您要寻找的。

最新更新