Grant 是一个 Laravel 的角色和权限包。
普什帕克·查杰德
您可以使用 PHP 枚举定义角色和权限,而数据库则存储每个用户的角色分配。所有检查都通过 Laravel 的 Gate 进行,因此现有的调用……
can()
,
Gate::authorize()
以及 Blade 的
@can
与格兰特一起工作。
定义枚举中的访问权限
权限枚举实现了 Grant 协议。
Ability
合约中,每个支持值都作为 Laravel Gate 中的一个能力注册。角色枚举实现了该合约。
Role
签订合同并列出其授予的权限:
使用
Shipfastlabs\Grant\Ability
;使用
Shipfastlabs\Grant\角色
作为
角色合同
;枚举
允许
:
细绳
实现
能力{
案件
编辑帖子
=
'编辑帖子'
;
案件
查看报告
=
'查看报告'
;
民众
功能
拒绝消息
()
:
细绳{
返回
“你不可以这样做。”
;}}枚举
角色
:
细绳
实现
角色合同{
案件
编辑
=
'编辑'
;
案件
观众
=
'查看器'
;
民众
功能
权限
()
:
大批{
返回
匹配
(
$this
){
自己::
编辑
=>
[
允许
::
编辑帖子
],
自己::
观众
=>
[
允许
::
查看报告
],};}}
Grant 使用角色进行分配,使用权限进行检查。它没有角色中间件或
@role
指令;路由使用 Laravel 的
授权功能
检查权限。如果您想了解更多关于在代码中定义权限的信息,请参阅我们关于此主题的文章。
使用枚举进行授权
。
分配全局或范围角色
在加入格兰特之后
HasRoles
通过用户模型的特性,您可以管理任务分配。
grant()
,
revoke()
, 和
syncRoles()
将 Eloquent 模型作为
on
将角色限定于该团队、项目或其他模式:
$用户
->
授予
(
角色
::
编辑
(英文):$用户
->
授予
(
角色
::
观众
,
在
:$team);$用户
->
能
(
允许
::
编辑帖子
(英文):$用户
->
能
(
允许
::
查看报告
,$team);
作用域权限检查包括用户的全局角色以及分配给该模型的角色。有关作用域权限的另一种方法,请参阅 拉洛 。
将权限与策略相结合
策略仍然可以处理所有权等模型规则。格兰特的
Requires
属性会在策略方法运行之前检查权限,让策略方法本身来检查帖子内容:
使用
Shipfastlabs\授权\需要
;#[
需要
(
允许
::
编辑帖子
)]民众
功能
更新
(
用户
$user,
邮政
$post)
:
布尔值{
返回
$post
->
作者 ID
===
$用户
->
ID;}
Grant 会将 Gate 参数转发到此检查,包括用于作用域角色的模型。您还可以将某个角色配置为超级管理员;只有全局分配的超级管理员角色才能绕过 Gate 检查。
安装和维护角色
Grant 需要 PHP 8.3 或更高版本以及 Laravel 12 或 13。安装命令会发布其配置和迁移文件,并在初始角色和权限枚举不存在时创建它们:
作曲家
要求
shipfastlabs/grantphp
工匠
授权:安装php
工匠
迁移
安装完成后,添加
Shipfastlabs\Grant\HasRoles
对用户模型而言,更改角色的后备值或删除案例会导致其旧的分配记录成为孤立记录,这意味着这些用户将失去该角色,直到您重新映射这些行。运行
php artisan grant:sync
重新映射或删除它们;
grant:list
和
grant:show
帮助检查已注册的权限和用户角色。
请参阅 授权库 用于配置、测试辅助程序和作用域角色示例。






