mukulsmu/laravel-nova-permission

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

0.1.3 2020-07-29 00:59 UTC

This package is auto-updated.

Last update: 2024-09-29 05:29:11 UTC


README

License Latest Stable Version Scrutinizer Code Quality Total Downloads

基于已废弃库 insenseanalytics/laravel-nova-permission 的分支

目前还不是生产就绪,目前正在编写测试以提高包的稳定性和开发升级路径。

这个 Nova 工具让您

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

屏幕截图

screenshot of the backup tool

需求 & 依赖

除了 Laravel Nova 包和 Spatie Permission 包外,没有其他PHP依赖。

安装

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

composer require mukulsmu/laravel-nova-permission

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

'providers' => [
    ...,
    Mukulsmu\LaravelNovaPermission\NovaPermissionServiceProvider::class,
]

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

// in app/Providers/NovaServiceProvider.php

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

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

use Laravel\Nova\Fields\MorphToMany;

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

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

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

本地化

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

php artisan vendor:publish --provider="Mukulsmu\LaravelNovaPermission\NovaPermissionServiceProvider"

使用自定义角色/权限资源类

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

// in app/Providers/NovaServiceProvider.php

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

基于权限的Nova资源授权

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

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

// in app/Nova/YourNovaResource.php

class YourNovaResource extends Resource
{
    use \Mukulsmu\LaravelNovaPermission\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',
    ];

贡献

欢迎贡献,只要您使用PSR-2,解释您想解决的问题/功能,并用测试支持您的代码。祝您编码愉快!

许可证

MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。