配置Backpack for Laravel PermissionManager的PermissionCrudController权限失效问题
解决方案
1. 让自定义Controller接管路由
替换Backpack默认的权限管理路由,确保你的自定义PermissionCrudController生效。在项目路由文件(如routes/backpack/custom.php)中添加以下代码,覆盖默认的权限、角色路由:
Route::group([ 'prefix' => config('backpack.base.route_prefix', 'admin'), 'middleware' => array_merge( (array) config('backpack.base.web_middleware', 'web'), (array) config('backpack.base.middleware_key', 'admin') ), ], function () { CRUD::resource('permission', 'App\Http\Controllers\Admin\PermissionCrudController'); CRUD::resource('role', 'App\Http\Controllers\Admin\RoleCrudController'); // 角色管理需自定义时添加 });
2. 修正Controller的权限控制逻辑
在PermissionCrudController的setup()方法中按以下逻辑编写,必须先调用父类setup方法再做自定义控制:
public function setup() { parent::setup(); // 先加载父类基础CRUD配置 // 全局禁用create、update、delete操作 $this->crud->denyAccess(['create', 'update', 'delete']); // 无permiso_listar_admin权限则禁用列表操作 if (!backpack_user()->can('permiso_listar_admin')) { $this->crud->denyAccess('list'); } // 给拥有crear_rol_admin权限的用户开放角色创建权限 if (backpack_user()->can('crear_rol_admin')) { $this->crud->allowAccess('create'); } }
3. 移除全局配置的硬限制
打开config/backpack/permissionmanager.php,将全局禁用CRUD的配置项恢复为默认值,避免全局配置覆盖Controller的权限逻辑:
// 确保这些配置不要设为false,交由Controller逻辑接管 'allow_permission_create' => true, 'allow_permission_update' => true, 'allow_permission_delete' => true, 'allow_role_create' => true, 'allow_role_update' => true, 'allow_role_delete' => true,
4. 给目标用户/角色分配对应权限
在权限管理界面(或通过代码)给需要创建角色的用户/角色分配crear_rol_admin权限,给需要查看权限列表的用户分配permiso_listar_admin权限。
内容的提问来源于stack exchange,提问作者Camus
相关产品推荐
相关产品推荐

