甜心1s / moonshine-roles-permissions
Moonshine角色和权限管理
2.3.3
2024-08-09 12:43 UTC
Requires
- php: ^8.1|^8.2|^8.3
- ext-curl: *
- ext-json: *
- lee-to/laravel-package-command: ^0.9.1
- spatie/laravel-permission: ^6.2
Requires (Dev)
- brianium/paratest: ^6.8
- mockery/mockery: ^1.4.4
- moonshine/moonshine: ^2.0
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0|^8.0
- phpstan/phpstan: ^1.4.7
- phpunit/phpunit: ^9.5.8
README
描述
此包是专门为MoonShine管理面板设计的扩展,基于Spatie Laravel Permissions包的功能。此扩展的主要目的是简化MoonShine管理面板中的基于角色的访问控制(RBAC)。通过使用此包,您可以有效地为角色分配权限,然后将这些角色分配给用户,从而简化了在基于角色的层面上管理权限的过程,而不是逐个为每个用户分配。
需求
Moonshine:v2.0+
Spatie Laravel Permissions:v6.0+
功能
- 基于角色的访问控制(RBAC):通过添加全面的基于角色的权限系统,增强您的MoonShine管理面板,允许您将具有相似权限的用户分组到角色中,并更有效地管理访问。
- 角色分配:无缝地将权限与角色关联,轻松定义特定用户组的访问权限。
- 批量角色分配:一次性将多个用户分配到相同的角色,减少在大型用户基础中管理权限的手动工作量。
- 无缝集成:该包与MoonShine管理面板无缝集成,并针对此面板扩展了Spatie Laravel Permissions包的功能。
重要
在开始使用此包之前,请务必了解您需要使用不同于 "MoonShineUser
" 的不同用户模型,并使用 users
表。此包需要使用Spatie Laravel。
安装
-
安装Spatie Laravel Permissions包,并按照文档中的说明正确设置包。
-
通过composer安装包
composer require sweet1s/moonshine-roles-permissions
- 在MoonShine配置文件中,将用户模型更改为默认User模型或您想要用于管理面板的模型。
return [ // ... 'auth' => [ // ... 'providers' => [ 'moonshine' => [ 'driver' => 'eloquent', 'model' => \App\Models\User::class, ], ], ], // ... ];
- 在
Spatie权限配置文件
中,将models.role更改为App\Models\Role::class
(模型需要扩展 \Spatie\Permission\Models\Role),如下所示
'models' => [ // ... 'role' => App\Models\Role::class, ],
- 对于您的角色模型,添加以下内容
<?php namespace App\Models; use Sweet1s\MoonshineRBAC\Traits\HasMoonShineRolePermissions; use Spatie\Permission\Models\Role as SpatieRole; class Role extends SpatieRole { use HasMoonShineRolePermissions; protected $with = ['permissions']; }
- 对于用户模型,添加以下内容
<?php namespace App\Models; // ... use Illuminate\Database\Eloquent\Relations\BelongsTo; use Sweet1s\MoonshineRBAC\Traits\MoonshineRBACHasRoles; class User extends Authenticatable { use MoonshineRBACHasRoles; const SUPER_ADMIN_ROLE_ID = 1; // ... }
- 运行以下命令安装包并遵循安装步骤
php artisan moonshine-rbac:install
- (可选)创建一个具有新模型的新用户,并自动将"超级管理员"角色分配给它。
php artisan moonshine-rbac:user
- 将
WithPermissionsFormComponent
添加到您的RoleResource
特质中
<?php namespace App\MoonShine\Resources; use Sweet1s\MoonshineRBAC\Traits\WithPermissionsFormComponent; use Sweet1s\MoonshineRBAC\Traits\WithRolePermissions; class RoleResource extends ModelResource { use WithRolePermissions; use WithPermissionsFormComponent; // ... }
将WithRoleFormComponent
添加到您的UserResource
特质中
<?php namespace App\MoonShine\Resources; use Sweet1s\MoonshineRBAC\Traits\WithRoleFormComponent; use Sweet1s\MoonshineRBAC\Traits\WithRolePermissions; class UserResource extends ModelResource { use WithRolePermissions; use WithRoleFormComponent; // ... }
或将新的MoonShine资源添加到您的MoonShineServiceProvider文件中,如下所示(您可以使用其他UserResource)
MenuGroup::make('System', [ MenuItem::make('Admins', new \Sweet1s\MoonshineRBAC\Resource\UserResource(), 'heroicons.outline.users'), MenuItem::make('Roles', new \Sweet1s\MoonshineRBAC\Resource\RoleResource(), 'heroicons.outline.shield-exclamation'), MenuItem::make('Permissions', new \Sweet1s\MoonshineRBAC\Resource\PermissionResource(), 'heroicons.outline.shield-exclamation'), ], 'heroicons.outline.user-group'),
菜单上的动态项目
如果您想向菜单中添加依赖于角色权限的动态项目,只需将菜单数组添加到MenuRBAC::menu()适配器中即可。
protected function menu(): array { return MenuRBAC::menu( MenuGroup::make('System', [ MenuItem::make('Admins', new \Sweet1s\MoonshineRBAC\Resource\UserResource(), 'heroicons.outline.users'), MenuItem::make('Roles', new \Sweet1s\MoonshineRBAC\Resource\RoleResource(), 'heroicons.outline.shield-exclamation'), ], 'heroicons.outline.user-group'), MenuItem::make(trans('moonshine::general.orders'), new OrderResource(), 'heroicons.outline.shopping-cart') ->badge(function(){ return Order::where('status', Status::Completed->name)->count(); }), //... ); }
用法
php artisan moonshine:resource Post
php artisan moonshine-rbac:permissions PostResource
您可以使用以下命令同时生成资源和权限
php artisan moonshine-rbac:resource Post
- 对于资源,添加以下内容
// ... use Sweet1s\MoonshineRBAC\Traits\WithRolePermissions; class PostResource extends ModelResource { use WithRolePermissions; // ... }
自定义权限
如果您想创建自定义权限,可以使用以下命令
php artisan moonshine-rbac:permission
或在PermissionResource中
本地化
该软件包默认包含英文、俄语和罗马尼亚语的翻译文件。如果您想自定义翻译,可以使用以下命令在项目中发布软件包的翻译文件
php artisan vendor:publish --tag=moonshine-rbac-lang