Laravel5.1基於Entrust擴展包實現的RBAC權限控制模塊(遷移到其餘項目中的方法)

Laravel5.1基於Entrust擴展包實現的RBAC權限控制模塊(遷移到其餘項目中的方法)

大部分的項目中,都須要權限控制,咱們的項目用的是Laravel5.1的框架,基於Entrust擴展包,寫了一個通用的RBAC權限控制模塊,方便後續其餘項目須要時可用直接遷移使用。php

github地址:https://github.com/NancyLin/l...
項目地址:git@github.com:NancyLin/laravel-rbac.gitcss

注意,若是要把項目下到本身的電腦上測試,修改.env的數據庫設置,將storage和bootstrap/cache 目錄更改成可讀寫可執行的權限。laravel

要把RBAC模塊遷移到本身的項目中方法以下:

(1)安裝配置Entrust擴展包

具體的安裝配置方法請看如下連接,這裏不作說明git

https://github.com/Zizaco/entrustgithub

(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' => 'App\Models\Role',

'permission' => 'App\Models\Permission',
  • .env, 更改CACHE_DRIVERbootstrap

CACHE_DRIVER=array

(4)註冊權限控制中間件

此份demo中,咱們對於須要進行權限控制的控制器都採用中間件方式,須要在 app/Http/Kernel.php 的 $routeMiddleware 中註冊中間件。app

$routeMiddleware = [
 ....
  //權限中間件
  'permission' => \App\Http\Middleware\AuthPermission::class,
]

(5)在 User 模型中引入EntrustUserTrait

在此demo中,在 appUser.php 中增長如下代碼:框架

use Zizaco\Entrust\Traits\EntrustUserTrait;

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', '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== 下的全部相關模塊控制器。

  • 拷貝 ==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模板文件。

相關文章
相關標籤/搜索