目錄
1、 安装
2、配置
3、用户角色权限表
4、模型类
首頁 後端開發 php教程 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(一):安装配置篇

使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(一):安装配置篇

Jun 20, 2016 pm 12:33 PM

Entrust为我们在Laravel中实现基于角色的权限管理(RBAC)提供了简洁灵活的方式。

1、 安装

想要在Laravel中使用Entrust,首先需要通过Composer来安装其依赖包:

composer require zizaco/entrust 5.2.x-dev
登入後複製

安装完成后需要在 config/app.php中注册服务提供者到 providers数组:

Zizaco\Entrust\EntrustServiceProvider::class,
登入後複製

同时在该配置文件中注册相应门面到 aliases数组:

'Entrust' => Zizaco\Entrust\EntrustFacade::class,
登入後複製

如果你想要使用中间件(要求Laravel 5.1或更高版本)还需要添加如下代码到 app/Http/Kernel.php的 routeMiddleware数组:

'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,
登入後複製

2、配置

在配置文件 config/auth.php中设置合适的值,Entrust会使用这些配置值来选择相应的用户表和模型类。

你还可以发布该扩展包的配置以便后续自定义相关表名以及模型类的命名空间:

php artisan vendor:publish
登入後複製

该命令会在 config目录下创建一个 entrust.php文件。

3、用户角色权限表

接下来我们使用Entrust提供的迁移命令生成迁移文件:

php artisan entrust:migration
登入後複製

然后通过以下命令生成相应的数据表:

php artisan migrate
登入後複製

最终会生成4张新表:

  • roles—— 存储角色
  • permissions—— 存储权限
  • role_user—— 存储角色与用户之间的多对多关系
  • permission_role—— 存储角色与权限之间的多对多关系

4、模型类

Role

我们需要创建Role模型类 app/Models/Role.php并编辑其内容如下:

<?php namespace App;use Zizaco\Entrust\EntrustRole;class Role extends EntrustRole{}
登入後複製

Role模型拥有三个主要属性:

  • name—— 角色的唯一名称,如“admin”,“owner”,“employee”等
  • display_name—— 人类可读的角色名,例如“后台管理员”、“作者”、“雇主”等
  • description—— 该角色的详细描述

display_name和 description属性都是可选的,在数据库中的相应字段默认为空。

Permission

接下来创建Permission模型 app/models/Permission.php并编辑其内容如下:

<?php namespace App;use Zizaco\Entrust\EntrustPermission;class Permission extends EntrustPermission{}
登入後複製

Permission模型也有三个主要属性:

  • name—— 权限的唯一名称,如“create-post”,“edit-post”等
  • display_name—— 人类可读的权限名称,如“发布文章”,“编辑文章”等
  • description—— 该权限的详细描述

User

接下来我们在 User模型中使用 EntrustUserTrait:

<?phpuse Zizaco\Entrust\Traits\EntrustUserTrait;class User extends Eloquent{    use EntrustUserTrait; // add this trait to your user model    ...}
登入後複製

这将会建立 User与 Role之间的关联关系:在 User模型中添加 roles()、 hasRole($name)、 can($permission)以及 ability($roles,$permissions,$options)方法。

软删除

使用Entrust提供的迁移命令生成的关联关系表中默认使用了 onDelete('cascade')以便父级记录被删除后会移除其对应的关联关系。如果你由于某种原因不能在数据库中使用级联删除,那么可以EntrustRole、EntrustPermission类以及HasRole trait提供的事件监听器手动删除关联表中的记录。如果模型使用了软删除,那么当不小心误删除数据时,事件监听器将不会删除关联表数据。然而,由于Laravel事件监听器的局限性,所以暂时无法区分是调用 delete()还是 forceDelete(),基于这个原因,在你删除一个模型之前,必须手动删除所有关联数据(除非你的数据表使用了级联删除):

$role = Role::findOrFail(1); // Pull back a given role// Regular Delete$role->delete(); // This will work no matter what// Force Delete$role->users()->sync([]); // Delete relationship data$role->perms()->sync([]); // Delete relationship data$role->forceDelete(); // Now force delete will work regardless of whether the pivot table has cascading delete
登入後複製

下一节我们将来演示如何在Laravel中使用Entrust实现RBAC。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

See all articles