oscillas / novaspatiepermissions
Laravel Nova 工具,用于管理 Laravel Nova 包中的 spaties 角色/权限。
Requires
- php: ^8.0
- laravel/nova: ^4.0
- spatie/laravel-permission: ^5.5
README
此 Nova 工具可以让您
- 在 Nova 控制台中管理角色和权限
- 为 Nova 资源使用基于权限的授权
截图
要求 & 依赖
除了 Laravel Nova v4 包和 Spatie Permission v5 包外,没有其他 PHP 依赖。
安装
您可以通过 composer 将此工具安装到使用 Nova 的 Laravel 应用中
composer require oscillas/novaspatiepermissions
接下来,如果您没有启用包发现,您需要在 config/app.php
文件中注册提供者。
'providers' => [ ..., Itsmejoshua\Novaspatiepermissions\NovaSpatiePermissionsServiceProvider::class, ]
接下来,您必须使用 Nova 注册此工具。这通常在 NovaServiceProvider
的 tools
方法中完成。
// 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)。有关更多信息,请参阅 许可证文件。