Laravrl5-整个模块控制器的用户权限

时间:2017-07-15 12:59:14

标签: php laravel-5 permissions middleware

我创建了一个简单的系统,使用AdminMiddleware为管理面板中的用户设置权限。 每个用户都拥有组,帖子,页面等权限....

路线/网络:

Route::group(['middleware' => 'admin'], function()
{
    Route::get('/admin' , 'admin\AdminController@index')->name('admin');
  //all admin panel routes
}

在AdminMiddleware中

public function handle($request, Closure $next)
{
    if(Auth::check()){

        if ($request->user()->user_type !== 'man')
        {
            return redirect('/');
        }
        $user_permissions = Auth::user()->permissions;
        foreach($user_permissions as $value){
            $controller = Controllers::get_controller($value->controller_id);
            $permissions['name'] = $controller->controller_name;

            $all_permissions[] = $permissions;
            unset($permissions);
        }
        foreach ($all_permissions as $value){
            $controllers[] =  trim($value['name']);
        }
        $request->user()->controllers = $controllers;

        return $next($request);

    }
    else{
        return redirect('/login');
    }
}

因此,我获得了代表控制器名称的所有用户权限列表,并且在每个控制器中(在此控制器中,我检查用户是否具有名为“users”的权限以访问用户控制器以查看其数据)

protected $user;

public function __construct(){
    $this->middleware(function ($request, $next) {
        $this->user= Auth::user();
        if(!in_array('users',$this->user->controllers)){
            session()->flash('error' , 'No permission');
            return redirect('/admin');
        }
        else{
            return $next($request);
        }
    });
}

我将它用于每个控制器,它适用于一个小项目,但是当涉及到一个带有模块(nWidart/laravel-modules)的大型项目时,它会很难。我想要的是检查整个模块的权限,而不是模块中的每个控制器。因此,如果我有一个名为blog的模块,我想检查登录用户是否有权访问该模块中的任何控制器,如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我为每个模块创建了一个中间件,在中间件中我获得了用户权限并检查他是否有权访问该组

public function handle($request, Closure $next)
{
    if(Auth::check()){

        if ($request->user()->user_type !== 'man')
        {
            return redirect('/');
        }
        $user_permissions = Auth::user()->permissions;
        $user_group = Auth::user()->group_id;

        if($user_group == 1){ //all permissions admin
            return $next($request);
        }
        else{
            //get user permissions as an array

            if(in_array('groups',$user_permissions)){ //module name is groups
                return $next($request);
            }

            else{
                return redirect('/home');
            }
        }


    }
    else{
        return redirect('/login');
    }
}

路线

Route::group(['middleware' => 'admin'], function()
{
    Route::get('/admin' , 'admin\AdminController@index')->name('admin');
});

Route::group(['middleware' => 'users'], function()
{
    Route::get('/adminUsers' , '\Modules\Users\Http\Controllers\UsersController@index');
});

Route::group(['middleware' => 'groups'], function()
{
    Route::get('/groups' , '\Modules\Groups\Http\Controllers\GroupsController@index');
});