codehero-mx / nova-permission-tool
用于Spatie的权限库的Laravel Nova工具。
v4.0
2023-03-02 12:37 UTC
Requires
- php: ^7.4|^8.0|^8.1
- laravel/nova: ^4.0
- spatie/laravel-permission: ^4.0|^5.0
This package is auto-updated.
Last update: 2024-09-30 01:41:17 UTC
README
安装
您可以通过composer将此包安装到使用Nova的Laravel应用程序中。
composer require codehero-mx/nova-permission-tool
请查阅安装部分,以设置laravel-permission。
接下来,您需要在Nova中注册此工具。这通常在NovaServiceProvider
的tools
方法中完成。
// in app/Providers/NovaServiceProvider.php // ... public function tools() { return [ // ... \CodeHeroMX\NovaPermission\NovaPermissionTool::make(), ]; }
接下来,将中间件添加到config/nova.php
// in config/nova.php 'middleware' => [ // ... \CodeHeroMX\NovaPermission\ForgetCachedPermissions::class, ],
最后,将MorphToMany
字段添加到您的app/Nova/User
资源中
// ... use Laravel\Nova\Fields\MorphToMany; public function fields(Request $request) { return [ // ... MorphToMany::make('Roles', 'roles', \CodeHeroMX\NovaPermission\Role::class), MorphToMany::make('Permissions', 'permissions', \CodeHeroMX\NovaPermission\Permission::class), ]; }
或者,如果您想一次性附加多个权限,请使用RoleBooleanGroup
和PermissionBooleanGroup
字段(需要至少Nova 2.6.0版本)
// ... use CodeHeroMX\NovaPermission\PermissionBooleanGroup; use CodeHeroMX\NovaPermission\RoleBooleanGroup; public function fields(Request $request) { return [ // ... RoleBooleanGroup::make('Roles'), PermissionBooleanGroup::make('Permissions'), ]; }
如果您的User
在任意给定时间只能有一个角色,您可以使用RoleSelect
字段。该字段将渲染一个标准选择框,您可以从中选择一个角色。
// ... use CodeHeroMX\NovaPermission\PermissionBooleanGroup; use CodeHeroMX\NovaPermission\RoleSelect; public function fields(Request $request) { return [ // ... RoleSelect::make('Role', 'roles'), ]; }
配置
您可以选择使用以下命令发布配置文件:
php artisan vendor:publish --provider="CodeHeroMX\NovaPermission\ToolServiceProvider" --tag="config"
自定义
如果您想使用自定义资源类,您可以在注册工具时定义它们。
// in app/Providers/NovaServiceProvider.php // ... public function tools() { return [ // ... \CodeHeroMX\NovaPermission\NovaPermissionTool::make() ->roleResource(CustomRole::class) ->permissionResource(CustomPermission::class), ]; }
如果您想使用自定义标签显示您的角色和政策,您可以在实例化字段时设置$labelAttribute
。
// ... use CodeHeroMX\NovaPermission\PermissionBooleanGroup; use CodeHeroMX\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 [ // ... \CodeHeroMX\NovaPermission\NovaPermissionTool::make() ->rolePolicy(RolePolicy::class) ->permissionPolicy(PermissionPolicy::class), ]; }
用法
安装此包后,您的Nova应用程序中将出现一个名为“权限 & 角色”的新菜单项。