【问题标题】:How to add multiple route filters in Laravel 4.2 while using role:permission pattern?如何在使用角色:权限模式时在 Laravel 4.2 中添加多个路由过滤器?
【发布时间】:2014-12-31 09:18:11
【问题描述】:

我在使用模式角色:权限时在 Laravel 4.2 中使用多个路由过滤器时遇到问题。我在下面附上了我的代码。

这根本不起作用。当我改变角色时,它总是给一个未经授权的 403。我希望版主和管理员都可以访问此路由。

也许有办法告诉 Laravel,“如果登录的用户是管理员版主,那么让他们访问这条路线”。

Route::get('engage', [

    'as'   => 'engage_path',
    'before' => 'role:administrator',
    'before' => 'role:moderator',
    'uses' => 'ManagementController@showEngagement'
]);

这是我的角色过滤器。

Route::filter('role', function($route, $request, $role)
{
    if (Auth::guest() or ! Auth::user()->hasRole($role))
    {
        return Response::make('Unauthorized', 403);
    }

});

【问题讨论】:

  • 你能告诉我们你的role过滤器吗?
  • 当然,请参阅上面的编辑。

标签: laravel


【解决方案1】:

我建议您使用某种分隔符,例如 ; 来传递多个角色。

'before' => 'role:administrator;moderator'

并更改过滤器:

Route::filter('role', function($route, $request, $value)
{
    if(Auth::check()){
        $user = Auth::user();
        $roles = explode(';', $value);
        foreach($roles as $role){
            if($user->hasRole($role)){
                return;
            }
        }
    }
    return Response::make('Unauthorized', 403);
});

【讨论】:

  • 我正在做这样的事情。 (刚在我脑海中浮现)我们的想法很相似:)
  • 好 :) 你甚至可以通过让 hasRole 方法接受一系列角色来让它变得更好。
  • 请注意,我使用- 作为分隔符。在这种情况下,Laravel 无法识别 ,
  • 有趣...; 也应该可以工作(之前做过)
猜你喜欢
  • 2016-01-21
  • 2018-10-27
  • 2020-10-11
  • 2014-01-14
  • 2017-01-16
  • 2013-01-10
  • 2012-11-19
  • 2021-08-26
  • 2014-06-07
相关资源
最近更新 更多