charlielangridge/nova-permission

一个用于 Spatie's Permission 库的 Laravel Nova 工具。

v4.0.4 2022-09-20 10:55 UTC

This package is auto-updated.

Last update: 2024-09-20 18:23:44 UTC


README

Latest Version on Packagist Total Downloads

screenshot 1

注意

感谢 vyuldashev。由于原始包已经有一段时间没有更新,并且没有来自 vyuldashev 的任何迹象,我创建了此分支,包含所有最新更改。我主要在项目中使用它,但也欢迎您使用。也欢迎提交 PR。

版本兼容性

随着 Nova 4.0 的发布,现在有两个单独的 Nova Permissions 版本。不幸的是,由于更新的性质,新的版本不向后兼容。因此,请根据需要选择版本。

安装

您可以通过 composer 将包安装到使用 Nova 的 Laravel 项目中

composer require kiritokatklian/nova-permission

查看 安装 部分,以设置 laravel-permission

接下来,您必须将工具注册到 Nova 中。这通常在 NovaServiceProvidertools 方法中完成。

// in app/Providers/NovaServiceProvider.php

// ...

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

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

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

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

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

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

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

// ...
use Vyuldashev\NovaPermission\PermissionBooleanGroup;
use Vyuldashev\NovaPermission\RoleBooleanGroup;

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

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

// ...
use Vyuldashev\NovaPermission\PermissionBooleanGroup;
use Vyuldashev\NovaPermission\RoleSelect;

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

自定义

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

// in app/Providers/NovaServiceProvider.php

// ...

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

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

// ...
use Vyuldashev\NovaPermission\PermissionBooleanGroup;
use Vyuldashev\NovaPermission\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 [
        // ...
        \Vyuldashev\NovaPermission\NovaPermissionTool::make()
            ->rolePolicy(RolePolicy::class)
            ->permissionPolicy(PermissionPolicy::class),
    ];
}

用法

安装此包后,您的 Nova 应用程序中将出现一个名为 "Permissions & Roles" 的新菜单项。