laravel 的背包试图实现权限、角色

backpack for laravel trying to implement permissions, roles

我已经为 backpack crud 包安装了权限管理器,它可以让我实现权限、角色、用户,但是没有示例在哪里放置代码来验证用户是否满足要求。

例如:我在我的设备控制器中的函数 setup() 中添加了下面的代码,它显示错误,我应该在路由中使用中间件吗??

我最近创建了中间件:

 class RoleMiddleware
 {
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next, $role, $permission)
{      


     // dd($request->user()); 
     // if (!Auth::user()->hasRole($role)) { 

     //      Alert::add('error', 'You do not have necessary authorization to access to the page')->flash(); return redirect('home'); 
     // } 

    // dd($request->user());
     if (Auth::guest()) {

       return redirect(url(config('backpack.base.route_prefix').'/login'));
      }

     dd($request->user()->hasRole($role));  //si pregunta si tiene el rol de administrador
     if (!$request->user()->hasRole($role)) {

         Alert::info('You do not have necessary authorization to access to the page Role');
        // abort(403);
      }

    if (!$request->user()->can($permission))  // pregunta si tiene el permiso de back_end
    {

        Alert::error('You do not have necessary authorization to access to the page Permission');
        abort(403);
     }


    return $next($request);
}

}

我的路线:

    Route::group(['middleware' => ['admin','role:admin,access_backend']], function() {

CRUD::resource('equipos', 'EquiposCrudController');
CRUD::resource('regiones', 'RegionesCrudController');
CRUD::resource('parametros', 'ParametrosCrudController');
CRUD::resource('estaciones', 'EstacionesCrudController'); 
}

如果我有一个具有 1 个角色 "Edit" 和权限 "back_end" 和 "edit" 的用户编辑器怎么办, 像这样设置中间件仅在符合管理员角色时才接受我的编辑器用户。正确的??我还应该向我的编辑器用户添加管理员角色吗?问题是管理员角色对所有内容都有权限。

我打算在每个控制器上动态实现下面的代码,而不是询问每个角色。还有其他选择吗?

class EquiposCrudController extends CrudController
{

 public function setup() {

   if($user->hasRole('editor')){

        $this->crud->denyAccess(['create','delete']);
    }

   if($user->hasRole('usuario')){

      $this->crud->denyAccess(['create','delete','update']);
   }

是的,中间件是检查用户身份验证的不错选择 和授权级别。您可以轻松地查询请求对象并进行相应的重定向。软件的实际身份验证(登录/注销)应由控制器处理。

还要查看 Laravel 的 Gates 和 Policies,它们为个人用户提供了经过微调的访问级别,例如您提到的用户具有特定权限的地方。

这是开始所有这一切的好地方:

https://josephsilber.com/index.php/posts/2016/08/03/authorization-improvements-in-laravel-5-3

试试这个:

$user = Auth::user();

if($user->hasRole('editor')){
    $this->crud->denyAccess(['create','delete']);
}

if($user->hasRole('usuario')){
  $this->crud->denyAccess(['create','delete','update']);
}