【问题标题】:Laravrl5- user permissions for whole module controllersLaravrl5- 整个模块控制器的用户权限
【发布时间】:2017-07-15 12:59:13
【问题描述】:

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

路线/网络:

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

在管理中间件中

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');
    }
}

所以我得到了代表控制器名称和每个控制器中的所有用户权限的列表(在这个控制器中,我检查用户是否具有名为“用户”的权限来访问用户控制器以查看他们的数据)

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 的模块,我想检查登录用户是否有权访问该模块中的任何控制器,如何做到这一点?

【问题讨论】:

  • 将您的模块路由添加到路由组中,并为该路由组添加中间件。这就是 laravel 对自己的路由所做的。

标签: php laravel-5 permissions middleware


【解决方案1】:

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

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');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2017-08-30
    • 2022-08-15
    • 2017-07-13
    相关资源
    最近更新 更多