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擴充套件包
具體的安裝配置方法請看以下連結,這裡不做說明
https://github.com/Zizaco/entrust
(2)安裝配置好後,根據我們自己的實際需求,更改相關的資料表欄位。
# 使用者表增加是否超級管理員
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 `描述`;
(3)更改配置檔案
-
config/entrust.php,指定相應的 role 和 permission 的 model。
`role` => `AppModelsRole`,
`permission` => `AppModelsPermission`,
-
.env, 更改CACHE_DRIVER
CACHE_DRIVER=array
(4)註冊許可權控制中介軟體
此份demo中,我們對於需要進行許可權控制的控制器都採用中介軟體方式,需要在 app/Http/Kernel.php 的 $routeMiddleware 中註冊中介軟體。
$routeMiddleware = [
....
//許可權中介軟體
`permission` => AppHttpMiddlewareAuthPermission::class,
]
(5)在 User 模型中引入EntrustUserTrait
在此demo中,在 appUser.php 中增加以下程式碼:
use ZizacoEntrustTraitsEntrustUserTrait;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
...
use 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`, `RbacUserController@index`);
Route::controller(`user`, `RbacUserController`);
Route::get(`role`, `RbacRoleController@index`);
Route::controller(`role`, `RbacRoleController`);
Route::get(`permission`, `RbacPermissionController@index`);
Route::controller(`permission`, `RbacPermissionController`);
});
(7)將RBAC相關模組的程式碼檔案或資料夾對應地拷貝到自己的專案中
具體相關模組檔案或資料夾如下:
-
拷貝 ==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模板檔案。