jeffersonsimaogoncalves/nova-permission

用于Spatie的权限库的Laravel Nova工具。

v4.0.2 2022-04-03 18:11 UTC

README

Latest Version on Packagist Total Downloads

screenshot 1

安装

您可以使用composer将此包安装到使用Nova的Laravel应用程序中。

composer require jeffersonsimaogoncalves/nova-permission

请参阅安装部分来设置laravel-permission

接下来,您需要在Nova中注册此工具。通常在NovaServiceProvidertools方法中完成此操作。

// in app/Providers/NovaServiceProvider.php

// ...

public function tools()
{
    return [
        // ...
        \JeffersonSimaoGoncalves\NovaPermission\NovaPermissionTool::make(),
    ];
}

接下来,向config/nova.php添加中间件

// in config/nova.php
'middleware' => [
    // ...
    \JeffersonSimaoGoncalves\NovaPermission\ForgetCachedPermissions::class,
],

最后,将MorphToMany字段添加到您的app/Nova/User资源中

// ...
use Laravel\Nova\Fields\MorphToMany;

public function fields(Request $request)
{
    return [
        // ...
        MorphToMany::make('Roles', 'roles', \JeffersonSimaoGoncalves\NovaPermission\Nova\Role::class),
        MorphToMany::make('Permissions', 'permissions', \JeffersonSimaoGoncalves\NovaPermission\Nova\Permission::class),
    ];
}

或者,如果您想一次性附加多个权限,请使用RoleBooleanGroupPermissionBooleanGroup字段(需要至少Nova 2.6.0)

// ...
use JeffersonSimaoGoncalves\NovaPermission\Nova\Fields\PermissionBooleanGroup;
use JeffersonSimaoGoncalves\NovaPermission\Nova\Fields\RoleBooleanGroup;

public function fields(Request $request)
{
    return [
        // ...
        RoleBooleanGroup::make('Roles'),
        PermissionBooleanGroup::make('Permissions'),
    ];
}

如果您的User在任何给定时间可能只有一个角色,您可以使用RoleSelect字段。此字段将渲染一个标准选择框,您可以从中选择单个角色。

// ...
use JeffersonSimaoGoncalves\NovaPermission\Nova\Fields\RoleSelect;

public function fields(Request $request)
{
    return [
        // ...
        RoleSelect::make('Role', 'roles'),
    ];
}

自定义

如果您想使用自定义资源类,您可以在注册工具时定义它们

// in app/Providers/NovaServiceProvider.php

// ...

public function tools()
{
    return [
        // ...
        \JeffersonSimaoGoncalves\NovaPermission\NovaPermissionTool::make()
            ->roleResource(CustomRole::class)
            ->permissionResource(CustomPermission::class),
    ];
}

如果您想使用自定义标签显示您的角色和策略,您可以在实例化字段时设置$labelAttribute

// ...
use JeffersonSimaoGoncalves\NovaPermission\Nova\Fields\PermissionBooleanGroup;
use JeffersonSimaoGoncalves\NovaPermission\Nova\Fields\RoleSelect;

public function fields(Request $request)
{
    return [
        // ...
        RoleBooleanGroup::make('Roles', 'roles', null, 'description'),
        PermissionBooleanGroup::make('Permissions', 'permissions', null, 'description'),
        RoleSelect::make('Role', 'roles', null, 'description'),
    ];
}

定义策略

// in app/Providers/NovaServiceProvider.php

// ...

public function tools()
{
    return [
        // ...
        \JeffersonSimaoGoncalves\NovaPermission\NovaPermissionTool::make()
            ->rolePolicy(RolePolicy::class)
            ->permissionPolicy(PermissionPolicy::class),
    ];
}

用法

安装此包后,您的Nova应用程序中将会出现一个名为“权限 & 角色”的新菜单项。

报告问题

如果您在此插件或任何错误中遇到问题,请在GitHub上提交问题。

致谢

此作品基于Vyuldashev的代码