如何将其他参数传递给Mojolicious中的`under`子程序?

时间:2017-02-17 14:47:18

标签: perl mojolicious

我有两条路线:

$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功能所需的目标路由用户级别?

2 个答案:

答案 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。不确定这是否是您正在寻找的。