yadahan/nova-bouncer

A Laravel Nova 工具,用于管理 Bouncer 角色和能力。

v2.0.1 2022-05-29 18:06 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:50 UTC


README

StyleCI Total Downloads GitHub license

利用 Bouncer 的力量,在你的 Nova 管理面板中进行管理。

安装

注意

Nova Bouncer 需要 laravel/nova ^4.0 和 silber/bouncer ^1.0。

您可以使用 Composer 将 Nova Bouncer 安装到您的 Laravel 项目中

composer require yadahan/nova-bouncer

配置

安装 Nova Bouncer 后,您需要在 app/Providers/NovaServiceProvder.php 文件中将工具注册到 Nova 中

public function tools()
{
    return [
        // ...
        new \Yadahan\BouncerTool\BouncerTool,
    ];
}

接下来,将 MorphToMany 字段添加到您的 app/Nova/User.php 文件中的用户资源

use Laravel\Nova\Fields\MorphToMany;
use Laravel\Nova\Fields\Text;

public function fields(Request $request)
{
    return [
        // ...
        MorphToMany::make('Roles', 'roles', 'Yadahan\BouncerTool\Nova\Role')->fields(function () {
            return [
                Text::make('Scope')
                    ->sortable()
                    ->rules('nullable', 'integer'),
            ];
        }),

        MorphToMany::make('Abilities', 'abilities', 'Yadahan\BouncerTool\Nova\Ability')
            ->fields(new \Yadahan\BouncerTool\Nova\PermissionsFields),
    ];
}

最后,使用 vendor:publish Artisan 命令发布 Nova Bouncer 配置

php artisan vendor:publish --provider="Yadahan\BouncerTool\BouncerToolServiceProvider"

发布配置后,您可以在 config/bouncer-tool.php 文件中定义您要管理的模型和能力

'actions' => [
    '*' => 'Manage',
    'viewAny' => 'View Any',
    'view' => 'View',
    'create' => 'Create',
    'update' => 'Update',
    'replicate' => 'Replicate',
    'delete' => 'Delete',
    'restore' => 'Restore',
    'forceDelete' => 'Force Delete',
    'runAction' => 'Run Action',
    'runDestructiveAction' => 'Run Destructive Action',
],

'entities' => [
    'User' => App\Models\User::class,
],

基本用法

您的 Nova 导航菜单中会出现一个新的部分(Bouncer)。

警告

只有有权管理 Bouncer 模型的用户才能看到此导航部分。

您可以赋予用户或角色管理 Bouncer 模型的权限

$user = User::find(1);

Bouncer::allow($user)->toManage(\Silber\Bouncer\Database\Role::class);
Bouncer::allow($user)->toManage(\Silber\Bouncer\Database\Ability::class);

// or

$role = Bouncer::role()->create(['name' => 'manage-bouncer']);

Bouncer::allow($role)->toManage(\Silber\Bouncer\Database\Role::class);
Bouncer::allow($role)->toManage(\Silber\Bouncer\Database\Ability::class);

$user->assign($role);

Laravel 授权

https://laravel.net.cn/docs/authorization#creating-policies

生成策略

您可以使用 make:policy Artisan 命令生成策略

php artisan make:policy UserPolicy --model=User

贡献

感谢您考虑为 Nova Bouncer 贡献。

许可协议

Nova Bouncer 是开源软件,许可协议为 MIT 许可证