mukulsmu / laravel-nova-permission
一个用于Spatie的权限库的Laravel Nova工具。
Requires
- php: >=7.2.0
- spatie/laravel-permission: ^3.0
This package is auto-updated.
Last update: 2024-09-29 05:29:11 UTC
README
基于已废弃库 insenseanalytics/laravel-nova-permission 的分支
目前还不是生产就绪,目前正在编写测试以提高包的稳定性和开发升级路径。
这个 Nova 工具让您
- 在Nova仪表板上管理角色和权限
- 为Nova资源使用基于权限的授权
屏幕截图
需求 & 依赖
除了 Laravel Nova 包和 Spatie Permission 包外,没有其他PHP依赖。
安装
您可以通过composer将此工具安装到使用 Nova 的Laravel应用中
composer require mukulsmu/laravel-nova-permission
接下来,如果您尚未启用包发现,您需要在 config/app.php
文件中注册提供者。
'providers' => [ ..., Mukulsmu\LaravelNovaPermission\NovaPermissionServiceProvider::class, ]
接下来,您必须使用Nova注册工具。这通常在 NovaServiceProvider
的 tools
方法中完成。
// 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)。请参阅 许可证文件 了解更多信息。