binary-cats/laravel-rbac

Laravel 11 的 spatie/laravel-permission RBAC 扩展

1.1.2 2024-04-15 01:49 UTC

This package is auto-updated.

Last update: 2024-09-17 16:21:29 UTC


README

Laravel RBAC

Latest Version on Packagist run-tests GitHub Code Style Action Status

增强 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 的基本部分:一个权限和一个角色。权限通常按功能或业务逻辑领域分组,而角色封装它们以适应特定的保护器。

  1. 创建能力
  2. 定义角色
  3. 连接点

能力

为了避免与 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.jsonpost-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)。请参阅 许可文件 了解更多详细信息。