dmitriy-robu/permissions-nova-spatie

Laravel Nova 管理Spatie角色/权限的工具,用于Laravel的nova包。

dev-main 2023-07-21 12:05 UTC

This package is not auto-updated.

Last update: 2024-09-27 17:38:34 UTC


README

License Latest Stable Version Total Downloads

这个 Nova 工具允许您

  • 在Nova仪表板上管理角色和权限
  • 为Nova资源使用基于权限的授权

屏幕截图

screenshot

要求 & 依赖

除了Laravel Nova v4包和Spatie Permission v5包之外,没有PHP依赖。

安装

您可以通过composer将此工具安装到使用Nova的Laravel应用中

composer require dmitriy-robu/permissions-nova-spatie

接下来,如果您没有启用包发现,您需要在config/app.php文件中注册提供者。

'providers' => [
    ...,
    Itsmejoshua\Novaspatiepermissions\NovaSpatiePermissionsServiceProvider::class,
]

接下来,您必须将工具与Nova注册。通常在NovaServiceProvidertools方法中完成此操作。

// in app/Providers/NovaServiceProvider.php
use Itsmejoshua\Novaspatiepermissions\Novaspatiepermissions;

public function tools()
{
    return [
        // ...
        Novaspatiepermissions::make(),
    ];
}

接下来,将MorphToMany字段添加到您的app/Nova/User资源中

use Laravel\Nova\Fields\MorphToMany;

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

最后,将ForgetCachedPermissions类添加到您的config/nova.php中间件中,如下所示

// in config/nova.php
'middleware' => [
	'web',
	Authenticate::class,
	DispatchServingNovaEvent::class,
	BootTools::class,
	Authorize::class,
	 \Itsmejoshua\Novaspatiepermissions\ForgetCachedPermissions::class,
],

本地化

您可以使用Artisan命令行工具发布本地化文件

php artisan vendor:publish --provider=" \Itsmejoshua\Novaspatiepermissions\NovaPermissionServiceProvider"

Nova资源基于权限的授权

默认情况下,Laravel Nova使用基于策略的授权用于Nova资源。如果您正在使用Spatie Permission库,您可能想将其替换为基于权限的授权,而不需要定义授权策略。

为此,您可以使用PermissionsBasedAuthTrait并在您的Nova资源类中定义一个静态数组属性permissionsForAbilities,如下所示

// in app/Nova/YourNovaResource.php

class YourNovaResource extends Resource
{
    use \Itsmejoshua\Novaspatiepermissions\PermissionsBasedAuthTrait;

    public static $permissionsForAbilities = [
      'all' => 'manage products',
    ];
}

上面的示例意味着所有对资源的操作都可以由具有“管理产品”权限的用户执行。您还可以为每个操作定义单独的权限,如下所示

    public static $permissionsForAbilities = [
      'viewAny' => 'view products',
      'view' => 'view products',
      'create' => 'create products',
      'update' => 'update products',
      'delete' => 'delete products',
      'restore' => 'restore products',
      'forceDelete' => 'forceDelete products',
      'addAttribute' => 'add product attributes',
      'attachAttribute' => 'attach product attributes',
      'detachAttribute' => 'detach product attributes',
    ];

关系

为了允许用户指定模型上的关系,您需要在模型上添加另一个权限。例如,如果您的Product属于User,请在app/Nova/User.php上添加以下权限。

    public static $permissionsForAbilities = [
      'addProduct' => 'add user on products'
    ];

贡献

欢迎贡献,解释您想解决的问题/功能,并用测试支持您的代码。快乐编码!

许可证

此包最初由https://github.com/insenseanalytics/laravel-nova-permission 开发,但他们已经放弃了此包。MIT许可证(MIT)。有关更多信息,请参阅许可证文件