Laravel5.1基于Entrust扩展包的RBAC权限控制模块(迁移到其他项目的方法)大多数项目都需要权限控制.我们的项目使用Laravel5.1框架。基于Entrust扩展包,我们编写了一个通用的RBAC权限控制模块,方便其他项目需要时直接移植。github地址:https://github.com/NancyLin/l...项目地址:git@github.com:NancyLin/laravel-rbac.git注意,如果要下载项目到自己电脑上测试,修改.env对于数据库设置,将storage和bootstrap/cache目录更改为读取、写入和执行权限。将RBAC模块移植到自己的项目中的方法如下:(1)安装配置Entrust扩展包。Entrust扩展包的具体安装配置方法可以参考以下链接,这里不再说明https://github.com/Zizaco/entrust(2)安装配置完成后,根据我们自己的实际需要,更改相关数据表字段。#添加用户表是否为超级管理员ALTERTABLE`users`ADDCOLUMN`is_super`TINYINT(1)NOTNULLDEFAULT0COMMENT'是否为超级管理员';#添加父菜单显示,ALTERTABLE`permissions`ADDCOLUMN`p_id`INT(10)NOTNULLDEFAULT0COMMENT'ParentmenuID'AFTER`id`;#添加权限表是否显示菜单ALTERTABLE`permissions`ADDCOLUMN`is_menu`TINYINT(1)NOTNULLDEFAULT0COMMENT'是否显示menuisdisplayed'AFTER`description`;#菜单是否添加到权限表ALTERTABLE`permissions`ADDCOLUMN`sort`TINYINT(4)NOTNULLDEFAULT0COMMENT'sort'AFTER`is_menu`;#display_name字段权限表中不允许为空ALTERTABLE`permissions`ModifyCOLUMN`display_name`VARCHAR(255)NOTNULLDEFAULT''COMMENT'displayname';#权限表中的描述字段不允许为空ALTERTABLE`permissions`ModifyCOLUMN`description`VARCHAR(255)NOTNULLDEFAULT''COMMENT'Desc撕裂';(3)更改配置文件config/entrust.php,指定相应的角色和权限模型。'role'=>'App\Models\Role','permission'=>'App\Models\Permission',.env,changeCACHE_DRIVERCACHE_DRIVER=array(4)注册权限控制中间件在这个demo中,我们需要执行控制器权限控制全部使用中间件,中间件需要在app/Http/Kernel.php中的$routeMiddleware中注册。$routeMiddleware=[....//权限中间件'permission'=>\App\Http\Middleware\AuthPermission::class,](5)在本demo的User模型中引入EntrustUserTrait,在appUser.php中添加如下内容代码:使用Zizaco\Entrust\Traits\EntrustUserTrait;类UserextendsModelimplementsAuthenticatableContract,CanResetPasswordContract{...使用EntrustUserTrait;...}(6)注册相关模块的路由在appHttproutes.php中注册相关路由Route::group(['middleware'=>['auth']],function(){Route::get('home','HomeController@index');Route::controller('check','CheckController');Route::controller('load','LoadBaseDataController');Route::get('user','Rbac\UserController@index');Route::controller('user','Rbac\UserController');Route::get('role','Rbac\RoleController@index');Route::controller('role','Rbac\RoleController');Route::get('permission','Rbac\PermissionController@index');Route::controller('permission','Rbac\PermissionController');});(7)将RBAC相关模块的代码文件或文件夹复制到自己的项目中。文件夹如下:复制==appHttpControllersRbac==下所有相关模块controller复制==appHttpControllersAdminController.php==管理通用controller,想要使用权限控制中间件的controller可以继承这个类。复制==appHttpControllersCheckController.php==验证数据控制器。复制==appHttpControllersLoadBaseDataController.php==以加载基础数据控制器。复制==appHttpMiddlewareAuthPermission.php==权限控制中间件。复制==appModelsRole.php==角色模型。复制==appModelsPermission.php==权限模型。复制==appPresentersRbacPresenter.php==Rbac视图逻辑处理类。复制==appRepositoriesRepository.php==数据模型基本逻辑处理类。复制==appRepositoriesUserRepository.php==用户模型基本逻辑处理类。复制==appRepositoriesRoleRepository.php==角色模型的基本逻辑处理类。复制==appRepositoriesPermissionRepository.php==权限模型基本逻辑处理类。复制==publiccss==下的所有文件和文件夹,前台用到的一些插件的css文件(有的直接用插件官网地址,如果加载太慢可以下载到本地项目)。复制==publicjs==下的所有文件和文件夹,一些前台用到的插件的js文件(有的直接用插件官网地址,如果加载太慢,可以下载到本地项目)和相关模块的js文件。复制==resourcesviewsrbac==文件夹,里面有相关模块的视图模板文件。复制==resourcesviewserrors==文件夹,里面有相关模块没有权限时跳转的视图模板文件。复制==resourcesviewslayouts==文件夹,里面有相关模块的公共模块的视图模板文件。
