binary-cats / laravel-rbac
Laravel 11 的 spatie/laravel-permission RBAC 扩展
Requires
- php: ^8.2
- illuminate/contracts: ^11.0
- lorisleiva/laravel-actions: ^2.8
- spatie/laravel-collection-macros: ^7.0
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-permission: ^6.4
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1
- orchestra/testbench: ^9.0
Suggests
- binary-cats/laravel-mailgun-webhooks: Handle Mailgun webhooks in your Laravel application
- binary-cats/laravel-sku: Generate SKUs for Eloquent models
README
Laravel RBAC
增强 Laravel 11,使用针对 spatie/laravel-permissions 的有意见扩展。在您的权限列表增长和维护成为问题之前,此包提供了一种简单的方式来定义角色及其权限。
安装
您可以通过 composer 安装此包
composer require binary-cats/laravel-rbac
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="rbac-config"
这是已发布配置文件的内容
return [ /* |-------------------------------------------------------------------------- | Role base access reset control |-------------------------------------------------------------------------- | | When running rbac:reset those commands will be executed in sequence | */ 'jobs' => [ \BinaryCats\LaravelRbac\Jobs\FlushPermissionCache::class, \BinaryCats\LaravelRbac\Jobs\ResetPermissions::class, \BinaryCats\LaravelRbac\Jobs\SyncDefinedRoles::class, ], /* |-------------------------------------------------------------------------- | Role base access ability set |-------------------------------------------------------------------------- | | Place your ability files in this folder, and they will be auto discovered | */ 'path' => app()->path('Abilities'), /* |-------------------------------------------------------------------------- | Defined Roles |-------------------------------------------------------------------------- | | Defined roles are immutable by users | */ 'roles' => [ ], ];
使用方法
php artisan rbac:reset
在简单的设置中,我们通常有两个 RBAC 的基本部分:一个权限和一个角色。权限通常按功能或业务逻辑领域分组,而角色封装它们以适应特定的保护器。
能力
为了避免与 spatie/laravel-permission
冲突,我们将使用 BackedEnum
能力枚举来保存枚举权限:您可以在 官方文档 中了解更多关于使用 枚举
作为权限的信息。
要创建一个能力
php artisan make:ability PostAbility
这将在 App\Abilities
中生成一个 PostAbility
namespace App\Abilities; enum PostAbility: string { case ViewPost = 'view post'; case CreatePost = 'create post'; case UpdatePost = 'update post'; case DeletePost = 'delete post'; }
默认存根包含相当标准的 CRUD 枚举,使用能力名称生成。请随意发布存根并根据需要调整。
定义的角色
正如其名所示,DefinedRole
提供了一种简化特定角色所需所有权限定义的机制。要创建一个 EditorRole
,请运行
php artisan make:role EditorRole
这将在 App\Roles
中生成一个 EditorRole
use BinaryCats\LaravelRbac\DefinedRole; class EditorRole extends DefinedRole { /** @var array|string[] */ protected array $guards = [ 'web' ]; /** * List of enumerated permissions for the `web` guard * * @return array */ public function web(): array { return []; } }
此类包含对角色及其 web
保护器的(现在可测试的!)配置定义。相当不错!我们现在可以像这样调整它
namespace App\Roles; use App\Abilities\PostAbility; use BinaryCats\LaravelRbac\DefinedRole; class EditorRole extends DefinedRole { /** @var array|string[] */ protected array $guards = [ 'web' ]; /** * List of enumerated permissions for the `web` guard * * @return array */ public function web(): array { return [ PostAbility::CreatePost, PostAbility::UpdatePost, PostAbility::ViewPost, ]; } }
现在您有信心特定角色具有特定权限了!
连接点
现在我们有了能力和角色,只需在 rbac.php
配置中注册角色即可。
'roles' => [ \App\Roles\EditorRole::class, ... ],
下次运行 rbac:reset
时,您的 RBAC 将自动重置。
集成
建议将脚本添加到 composer.json
的 post-autoload-dump
,以确保在每次 composer dump 时重置 RBAC
"post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan rbac:reset" ],
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全性
如果您发现任何安全相关的问题,请通过电子邮件 cyrill.kalita@gmail.com 而不是使用问题跟踪器。
Postcardware
您可以自由使用此包,但如果它进入了您的生产环境,我们非常感谢您从您家乡寄给我们一张明信片,说明您正在使用我们的哪些包。
鸣谢
许可
MIT 许可证(MIT)。请参阅 许可文件 了解更多详细信息。