使用 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会使用这些配置值来选择相应的用户表和模型类:
'providers' => ['users' => ['driver' => 'eloquent','model' => App\User::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 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;use Zizaco\Entrust\EntrustPermission;class Permission extends EntrustPermission { }
Permission
模型也有三个主要属性:
name
—— 权限的唯一名称,如“create-post”,“edit-post”等display_name
—— 人类可读的权限名称,如“发布文章”,“编辑文章”等description
—— 该权限的详细描述
User
接下来我们在User
模型中使用EntrustUserTrait
:
<?phpnamespace App;use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Zizaco\Entrust\Traits\EntrustUserTrait;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(); // 不管透视表是否有级联删除都会生效
使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理与安装配置相关推荐
- laravel学习笔记------使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理
为什么80%的码农都做不了架构师?>>> Entrust为我们在Laravel中实现基于角色的权限管理(RBAC)提供了简洁灵活的方式. 1.安装 想要在Laravel中使用E ...
- 在Egg.js中实现RBAC权限管理
什么是RBAC? RBAC是基于角色的权限访问控制,在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限,也就是说权限是和角色绑定在一起的. RBAC权限管理树形图 角色管理 ...
- php中rbac三张表的关系,thinkPHP的RBAC权限管理
thinkPHP的RBAC权限管理 如何进行thinkPHP的rbac权限管理呢?下面是由百分网小编为大家整理的thinkPHP的RBAC权限管理,喜欢的可以收藏一下!了解更多详情资讯,请关注应届毕业 ...
- php 验证码 扩展,使用 Captcha 扩展包 为 Laravel 5 应用生成验证码
1.安装 我们通过 Composer 安装Captcha 扩展包 : composer require mews/captcha 注:Windows中使用该扩展包还需要安装 GD2 扩展(在 php. ...
- 不是Linux文件系统的权限,Linux中文件系统的权限管理(普通权限,特殊权限,文件的扩展属性,FACL)...
文件系统的权限管理(DAC体系:自主访问控制体系): 普通权限 特殊权限 文件的扩展属性 FACL(文件系统访问控制列表) 安全上下文: 任何在计算机中执行的任务都是由进程来实现的,所以进程就有必要访 ...
- Oracle中的系统权限管理
在实际的IT项目管理中,对数据库的管理显得尤为重要,一般情况下,数据库的管理工作会有公司中的DBA人员来负责.但是,不是任何有关数据库的操作都要去联系DBA啦,万一人家不在或有其它事情不能立即处理时该 ...
- SpringBoot中关于Shiro权限管理的整合使用
在整合Shiro的时候,我们先要确定一下我们的步骤: 1.加入Shiro的依赖包,实现自己的Realm类(通过继承AuthorizingRealm类): 2.实现Shiro的配置类 3.实现前端的登录 ...
- CentOS 6.x 使用包管理器安装配置Apache+PHP+MySql
Apache: 安装: yum install httpd #根据提示,输入Y安装即可成功安装 配置: vi /etc/httpd/conf/httpd.conf #A ...
- Oracle中用户角色权限管理
一,Oracle 用户,角色,权限 权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种, ...
最新文章
- python编程视频-Python开发视频百度就得看这个!
- java 类的加载、连接和初始化
- 记录今天写的几个正则,数字范围的校验
- QTP提供的编程接口实现对QTP操作
- OWASP-ZAP扫描器的使用(攻击)
- xml的应用与dtd约束
- 1.1.0-简介-P10-分布式事务的解决方案
- 蓝桥杯2016年第七届C/C++省赛B组第九题-交换瓶子
- 怎样的学术导师是好导师(Nature)
- 解决Nvivo自动编码问题,nvivo自动编码语言包
- 如何把小米和计算机共享,小米随身Wifi如何让手机共享电脑文件 小米wifi共享电脑文件教程...
- 2019-01-21-mqtt-mosquitto-启动Unable to load CA certificates
- LoadBalancer 负载均衡
- 手把手教你用Python轻松玩转SQL注入
- 用CSS做的简单弹窗
- linux的影子系统,利用Ubuntu卸掉影子系统2008试用版
- allegro标注尺寸设置_Allegro中尺寸标注文字的设置
- Powershell批量解锁被锁定的AD账号
- Base64 SHA1 MD5
- java 变量重名_关于java中变量的重名问题
热门文章
- 编程java好学吗,java初级编程好学吗
- 在印度与软件相关的发明可不可以申请专利?
- python中len用法_简单介绍Python中的len()函数的使用
- element-ui表格表头内容 限制不换行
- 史上最全的CSS基础知识大全!
- 快速的在Adobe Illustrator中创建羊驼插图教程
- html背景斜线,巧妙的实现 CSS 斜线(炫酷的小效果)
- 华为p10 内存测试软件,华为p10闪存门怎么回事 华为p10/P10Plus闪存怎么测试
- 深入解读-微信小程序SDK
- YoloV3学习笔记(一)—— 打标签