大部分的項目中,都須要權限控制,咱們的項目用的是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模板文件。