Laravel5.1基於Entrust擴充套件包實現的RBAC許可權控制模組(遷移到其他專案中的方法)

South發表於2019-02-16

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模板檔案。

相關文章