charlielangridge / nova-permission
一个用于 Spatie's Permission 库的 Laravel Nova 工具。
Requires
- php: ^7.4|^8.0|^8.1
- laravel/nova: ^4.0
- spatie/laravel-permission: ^3.0|^4.0|^5.0
This package is auto-updated.
Last update: 2024-09-20 18:23:44 UTC
README
注意
感谢 vyuldashev。由于原始包已经有一段时间没有更新,并且没有来自 vyuldashev 的任何迹象,我创建了此分支,包含所有最新更改。我主要在项目中使用它,但也欢迎您使用。也欢迎提交 PR。
版本兼容性
随着 Nova 4.0 的发布,现在有两个单独的 Nova Permissions 版本。不幸的是,由于更新的性质,新的版本不向后兼容。因此,请根据需要选择版本。
安装
您可以通过 composer 将包安装到使用 Nova 的 Laravel 项目中
composer require kiritokatklian/nova-permission
查看 安装 部分,以设置 laravel-permission。
接下来,您必须将工具注册到 Nova 中。这通常在 NovaServiceProvider
的 tools
方法中完成。
// 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), ]; }
或者,如果您想一次性附加多个权限,请使用 RoleBooleanGroup
和 PermissionBooleanGroup
字段(需要至少 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" 的新菜单项。