如何一次编写或使用两级用户权限?

时间:2017-06-02 01:41:48

标签: laravel laravel-5.2 middleware laravel-middleware

我在中间件中有两个级别并且它运行不正常,那么如何一次编写两个级别的中间件?

public function __construct()
{
  $this->middleware('auth');
  $this->middleware('Admin');
  $this->middleware('Teacher');
}

我也有这个,我想检查一下这个页面只能由管理员和老师访问,但是在编写代码时它不能正常工作以及如何正确编写它?

@if (Auth::check() && Auth::user()->level == 'Admin')
  @elseif (Auth::check() && Auth::user()->level == 'Teacher')
@endif

如果你能帮助我解决这个问题,我将非常感激

2 个答案:

答案 0 :(得分:0)

根据我的经验,我使用中间件做到了..

<强>中间件

public function handle($request, Closure $next, $roles)
{
    $roles = explode('|',$roles);
    $user = User::find($request->user()->id);
    foreach($user->intRoles as $myRole)
    {
        if(in_array($myRole->role_id, $roles))
        {
            return $next($request);
        }
    }
    return redirect()->back();
}

<强>路线

Route::group( ['middleware' => 'rolePermissions:1|2|3'], function(){
    Route::get('/users',['as'=>'users', 'uses'=>'PagesController@users']);
});
  只有角色(身份证)为1,2或3的用户才能访问mydomain.com/users。

答案 1 :(得分:0)

您有2个独立的中间件用于检查用户级别。这会强制条件并且不会按照您想要的方式工作。您需要一个中间件来检查用户级别并将参数传递给它。

假设我们将此中间件命名为for (row = 0; matrix.length > 0 && row < matrix[0].length; ++row)

access

在您的控制器中添加此

public function handle($request, Closure $next, $levels)
{
    $userLevels = explode(',', $levels);

    if (Auth::check() && in_array(Auth::user()->level, $userLevels)) {
        return $next($request);
    }

    return redirect('/home');
}