Laravel 包

Grant:Laravel 的基于枚举的角色和权限

发布
授权:基于枚举的 Laravel 镜像角色和权限

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/grant
php 工匠 授权:安装
php 工匠 迁移

安装完成后,添加 Shipfastlabs\Grant\HasRoles 对用户模型而言,更改角色的后备值或删除案例会导致其旧的分配记录成为孤立记录,这意味着这些用户将失去该角色,直到您重新映射这些行。运行 php artisan grant:sync 重新映射或删除它们; grant:list 和 grant:show 帮助检查已注册的权限和用户角色。

请参阅 授权库 用于配置、测试辅助程序和作用域角色示例。

Yannick Lyn Fatt 的照片

Laravel News 的特约撰稿人和全栈 Web 开发人员。

归档于

赞助

Laravel Cloud 标志
Laravel 云

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

访问 Laravel Cloud
Laravel 13.35 图片中的 Route::query() 和 Model defaults()

Laravel 13.35 中的 Route::query() 和 Model defaults()

阅读文章
Laravel AI SDK 1.1 新增了智能体技能和 Cohere 聊天图像功能

Laravel AI SDK 1.1 新增了 Agent Skills 和 Cohere Chat 功能

阅读文章
VMPal:给你的AI代理一个完整的计算机图像

VMPal:赋予你的AI代理一台完整的计算机

阅读文章
Synapse:Laravel AI SDK Agents 的开发者仪表盘

Synapse:Laravel AI SDK 代理的开发者控制面板

阅读文章
Jev 的决策指南:使用 Laravel AI SDK 图片在一个请求中提出三个问题

和 Jev 一起做决定:使用 Laravel AI SDK 在一个请求中提出三个问题

阅读文章
使用 Plumb 图像保护 Filament 插件

使用 Plumb 保护 Filament 插件

阅读文章