使用 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。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The enumeration function in PHP8.1 enhances the clarity and type safety of the code by defining named constants. 1) Enumerations can be integers, strings or objects, improving code readability and type safety. 2) Enumeration is based on class and supports object-oriented features such as traversal and reflection. 3) Enumeration can be used for comparison and assignment to ensure type safety. 4) Enumeration supports adding methods to implement complex logic. 5) Strict type checking and error handling can avoid common errors. 6) Enumeration reduces magic value and improves maintainability, but pay attention to performance optimization.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

RESTAPI design principles include resource definition, URI design, HTTP method usage, status code usage, version control, and HATEOAS. 1. Resources should be represented by nouns and maintained at a hierarchy. 2. HTTP methods should conform to their semantics, such as GET is used to obtain resources. 3. The status code should be used correctly, such as 404 means that the resource does not exist. 4. Version control can be implemented through URI or header. 5. HATEOAS boots client operations through links in response.

In PHP, exception handling is achieved through the try, catch, finally, and throw keywords. 1) The try block surrounds the code that may throw exceptions; 2) The catch block handles exceptions; 3) Finally block ensures that the code is always executed; 4) throw is used to manually throw exceptions. These mechanisms help improve the robustness and maintainability of your code.

The main function of anonymous classes in PHP is to create one-time objects. 1. Anonymous classes allow classes without names to be directly defined in the code, which is suitable for temporary requirements. 2. They can inherit classes or implement interfaces to increase flexibility. 3. Pay attention to performance and code readability when using it, and avoid repeatedly defining the same anonymous classes.
