概述
Entrust为我们在Laravel中实现基于角色的权限管理(RBAC)提供了简洁灵活的方式。
1、安装
想要在Laravel中使用Entrust,首先需要通过Composer来安装其依赖包:
composer require zizaco/entrust 5.2.x-dev
安装完成后需要在config/app.php中注册服务提供者到providers数组:
ZizacoEntrustEntrustServiceProvider::class,
同时在该配置文件中注册相应门面到aliases数组:
'Entrust' => ZizacoEntrustEntrustFacade::class,
如果你想要使用中间件(要求Laravel 5.1或更高版本)还需要添加如下代码到app/Http/Kernel.php的routeMiddleware数组:
'role' => ZizacoEntrustMiddlewareEntrustRole::class,'permission' => ZizacoEntrustMiddlewareEntrustPermission::class,'ability' => ZizacoEntrustMiddlewareEntrustAbility::class,
2、配置
在配置文件config/auth.php中设置合适的值,Entrust会使用这些配置值来选择相应的用户表和模型类:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppUser::class, 'table' => 'users', ],],
你还可以发布该扩展包的配置以便后续自定义相关表名以及模型类的命名空间:
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/Role.php并编辑其内容如下:
<?php namespace App;use ZizacoEntrustEntrustRole;class Role extends EntrustRole{}
Role模型拥有三个主要属性:
- name —— 角色的唯一名称,如“admin”,“owner”,“employee”等
- display_name —— 人类可读的角色名,例如“后台管理员”、“作者”、“雇主”等
- description —— 该角色的详细描述
display_name和description属性都是可选的,在数据库中的相应字段默认为空。
Permission
接下来创建Permission模型app/Permission.php并编辑其内容如下:
<?php namespace App;use ZizacoEntrustEntrustPermission;class Permission extends EntrustPermission{}
Permission模型也有三个主要属性:
- name —— 权限的唯一名称,如“create-post”,“edit-post”等
- display_name —— 人类可读的权限名称,如“发布文章”,“编辑文章”等
- description —— 该权限的详细描述
User
接下来我们在User模型中使用EntrustUserTrait:
<?phpnamespace App;use IlluminateNotificationsNotifiable;use IlluminateFoundationAuthUser as Authenticatable;use ZizacoEntrustTraitsEntrustUserTrait;class User extends Authenticatable{ use Notifiable; use EntrustUserTrait; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ];}
这将会建立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); // 获取给定权限// 正常删除$role->delete();// 强制删除$role->users()->sync([]); // 删除关联数据$role->perms()->sync([]); // 删除关联数据$role->forceDelete(); // 不管透视表是否有级联删除都会生效
![6e5430c5a49781e09f3aec46c5df490c.png](https://file2.kaopuke.com:8081/files_image/2023110822/6e5430c5a49781e09f3aec46c5df490c.png)
扩展链接:非常使用的代码优化,怎么才能写好代码
最后
以上就是纯真玉米为你收集整理的laravel 创建用户的同时创建其他表 如何实现_使用 Entrust 扩展包中Laravel 5实现权限管理和安装配置...的全部内容,希望文章能够帮你解决laravel 创建用户的同时创建其他表 如何实现_使用 Entrust 扩展包中Laravel 5实现权限管理和安装配置...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复