使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(一):安装配置篇
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。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...
