想要在laravel中使用entrust,首先需要通过compor
来安装其依赖包:
compor require zizaco/entrust 5.2.x-de
安装完成后需要在config/app.php
中注册服务提供者到providers数组:
zizaco\entrust\entrustrviceprovider::class,
同时在该配置文件中注册相应门面到alias数组:
‘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,
②配置
在配置文件config/auth.php
中设置合适的值,entrust会使用这些配置值来选择相应的用户表和模型类:
'providers' => [ 'urs' => [ 'driver' => 'eloquent', 'model' => app\ur::class, 'table' => 'urs', ],],
你还可以发布该扩展包的配置以便后续自定义相关表名以及模型类的命名空间:
php artisan vendor:publish
该命令会在config 目录下创建一个entrust.php 文件。
3、用户角色权限表
接下来我们使用entrust提供的迁移命令生成迁移文件:
php artisan entrust:migration
如果执行上面的 命令出现 以下的错误:
处理方法:vendor-> zizaco-> entrust-> src-> commands-> migrationcommand.php ,并将”fire“方法更改为”handle“ 然后通过以下命令生成相应的数据表:
php artisan migrate
最终会生成4张新表:
roles —— 存储角色permissions —— 存储权限role_ur —— 存储角色与用户之间的多对多关系permission_role —— 存储角色与权限之间的多对多关系4、模型类
role
我们需要创建role模型类app/role.php并编辑资源型城市其内容如下:
<?php namespace app;u zizaco\entrust\entrustrole;class role extends entrustrole{}
role模型拥有三个主要属性:
name —— 角色的唯一名称,如“admin”,“owner”,“employee”等display_name —— 人类可读的角色名,例如“后台管理员”、“作者”、“雇主”等description —失踪的孩子— 该角色的详细描述display_name 和description 属性都是可选的,在数据库中的相应字段默认为空。permission
接下来创建permission模型app/permission.php并编辑其内容如下:
<?php namespace app;u zizaco\entrust\entrustpermission;class permission extends entrustpermission{}
permission模型也有三个主要属性:
name —— 权限的唯一名称,如“create-post”,“edit-post”等display_name —— 人类可读的权限名称,如“发布文章”,“编辑文章”等description —— 该权限的详细描述ur
接下来我们在ur模型中使用entrusturtrait:
<?phpnamespace app;u illuminate\notifications\notifiable;u illuminate\foundation\auth\ur as authenticatable;u zizaco\entrust\traits\entrusturtrait;class ur extends authenticatable{ u notifiable; u entrusturtrait; /** * the attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * the att圣诞节送什么ributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ];}
这将会建立ur 与role 之间的关联关系:在ur模型中添加roles()
、hasrole($name)
、can($permission)
以及ability($roles,$permissions,$options)
方法。
软删除
使用entrust提供的迁移命令生成的关联关系表中默认使用了ondelete('cascade')
以便父级记录被删除后移除其对应的关联关系。如果你由于某种原因不能在数据库中使用级联删除,那么可以在entrustrole 、entrustpermission 类以及hasrole trait提供的事件监听器中手动删除关联表中的记录。如果模型使用了软删除,那么当不小心误删除数据时,事件监听器将不会删除关联表数据。不过,由于laravel事件监听器的局限性,所以暂时无法区分是调用delete() 还是forcedelete()
,基于这个原因,在你删除一个模型之前,必须手动删除所有关联数据(除非你的数据表使用了级联删除):
$role = role::findorfail(1); // 获取给定权限// 正常删除$role->delet成都市20中e();// 强制删除$role->urs()->sync([]); // 删除关联数据$role->perms()->sync([]); // 删除关联数据$role->forcedelete(); // 不管透视表是否有级联删除都会生效
总结
到此这篇关于使用entrust扩展包在laravel 中实现rbac的功能的文章就介绍到这了,更多相关entrust扩展包实现rbac内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-08 19:42:26,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/446a3c40bd66ded8dfd08b5cd59c89aa.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:使用Entrust扩展包在laravel 中实现RBAC的功能.doc
本文 PDF 下载地址:使用Entrust扩展包在laravel 中实现RBAC的功能.pdf
留言与评论(共有 0 条评论) |