大部分的项目中,都须要权限控制,咱们的项目用的是Laravel5.1的框架,基于Entrust扩展包,写了一个通用的RBAC权限控制模块,方便后续其余项目须要时可用直接迁移使用。php
github地址:https://github.com/NancyLin/l...
项目地址:git@github.com:NancyLin/laravel-rbac.gitcss
注意,若是要把项目下到本身的电脑上测试,修改.env的数据库设置,将storage和bootstrap/cache 目录更改成可读写可执行的权限。laravel
具体的安装配置方法请看如下连接,这里不作说明git
https://github.com/Zizaco/entrustgithub
# 用户表增长是否超级管理员 ALTER TABLE `users` ADD COLUMN `is_super` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否超级管理员'; # 权限表增长父类菜单显示、 ALTER TABLE `permissions` ADD COLUMN `p_id` INT(10) NOT NULL DEFAULT 0 COMMENT '父类菜单ID' AFTER `id`; # 权限表增长是否菜单显示 ALTER TABLE `permissions` ADD COLUMN `is_menu` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否菜单显示' AFTER `description`; # 权限表增长是否菜单显示 ALTER TABLE `permissions` ADD COLUMN `sort` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '排序' AFTER `is_menu`; # 权限表中display_name字段不容许为空 ALTER TABLE `permissions` Modify COLUMN `display_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '显示名称'; # 权限表中description字段不容许为空 ALTER TABLE `permissions` Modify COLUMN `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '描述';
config/entrust.php,指定相应的 role 和 permission 的 model。数据库
'role' => 'App\Models\Role', 'permission' => 'App\Models\Permission',
.env, 更改CACHE_DRIVERbootstrap
CACHE_DRIVER=array
此份demo中,咱们对于须要进行权限控制的控制器都采用中间件方式,须要在 app/Http/Kernel.php 的 $routeMiddleware 中注册中间件。app
$routeMiddleware = [ .... //权限中间件 'permission' => \App\Http\Middleware\AuthPermission::class, ]
在此demo中,在 appUser.php 中增长如下代码:框架
use Zizaco\Entrust\Traits\EntrustUserTrait; class User extends Model implements AuthenticatableContract, CanResetPasswordContract { ... use EntrustUserTrait; ... }
在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'); });
具体相关模块文件或文件夹以下:
拷贝 ==appHttpControllersRbac== 下的全部相关模块控制器。
拷贝 ==appHttpControllersAdminController.php== 管理通用控制器,要走权限控制中间件的控制器,均可以继承该类。
拷贝 ==appHttpControllersCheckController.php== 验证数据控制器。
拷贝 ==appHttpControllersLoadBaseDataController.php== 加载基础数据控制器。
拷贝 ==appHttpMiddlewareAuthPermission.php== 权限控制中间件。
拷贝 ==appModelsRole.php== 角色model。
拷贝 ==appModelsPermission.php== 权限model。
拷贝 ==appPresentersRbacPresenter.php== Rbac视图逻辑处理类。
拷贝 ==appRepositoriesRepository.php== 数据model基础逻辑处理类。
拷贝 ==appRepositoriesUserRepository.php== 用户model基础逻辑处理类。
拷贝 ==appRepositoriesRoleRepository.php== 角色model基础逻辑处理类。
拷贝 ==appRepositoriesPermissionRepository.php== 权限model基础逻辑处理类。
拷贝 ==publiccss== 下的全部文件和文件夹,前台使用的插件的一些css文件(有些直接使用插件的官网地址,若是加载太慢,可将其下载到本地项目)。
拷贝 ==publicjs== 下的全部文件和文件夹,前台使用的插件的一些js文件(有些直接使用插件的官网地址,若是加载太慢,可将其下载到本地项目)以及相关模块的js文件。
拷贝 ==resourcesviewsrbac== 文件夹,里面包含相关模块的view模板文件。
拷贝 ==resourcesviewserrors== 文件夹,里面包含相关模块没有权限时跳转的view模板文件。
拷贝 ==resourcesviewslayouts== 文件夹,里面包含相关模块的通用模块的view模板文件。