甜心1s/moonshine-roles-permissions

Moonshine角色和权限管理

2.3.3 2024-08-09 12:43 UTC

This package is auto-updated.

Last update: 2024-09-09 12:47:09 UTC


README

描述

此包是专门为MoonShine管理面板设计的扩展,基于Spatie Laravel Permissions包的功能。此扩展的主要目的是简化MoonShine管理面板中的基于角色的访问控制(RBAC)。通过使用此包,您可以有效地为角色分配权限,然后将这些角色分配给用户,从而简化了在基于角色的层面上管理权限的过程,而不是逐个为每个用户分配。

Total Downloads Latest Stable Version License

Laravel 9+ PHP 8+ Moonshine Admin Panel

需求

Moonshine:v2.0+

Spatie Laravel Permissions:v6.0+

功能

  • 基于角色的访问控制(RBAC):通过添加全面的基于角色的权限系统,增强您的MoonShine管理面板,允许您将具有相似权限的用户分组到角色中,并更有效地管理访问。
  • 角色分配:无缝地将权限与角色关联,轻松定义特定用户组的访问权限。
  • 批量角色分配:一次性将多个用户分配到相同的角色,减少在大型用户基础中管理权限的手动工作量。
  • 无缝集成:该包与MoonShine管理面板无缝集成,并针对此面板扩展了Spatie Laravel Permissions包的功能。

重要

在开始使用此包之前,请务必了解您需要使用不同于 "MoonShineUser" 的不同用户模型,并使用 users 表。此包需要使用Spatie Laravel。

安装

  1. 安装Spatie Laravel Permissions包,并按照文档中的说明正确设置包。

  2. 通过composer安装包

composer require sweet1s/moonshine-roles-permissions
  1. 在MoonShine配置文件中,将用户模型更改为默认User模型或您想要用于管理面板的模型。
return [
    // ...
    'auth' => [
        // ...
        'providers' => [
            'moonshine' => [
                'driver' => 'eloquent',
                'model' => \App\Models\User::class,
            ],
        ],
    ],
    // ...
];
  1. Spatie权限配置文件中,将models.role更改为App\Models\Role::class(模型需要扩展 \Spatie\Permission\Models\Role),如下所示
'models' => [
    // ...
    'role' => App\Models\Role::class,
],
  1. 对于您的角色模型,添加以下内容
<?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'];
}
  1. 对于用户模型,添加以下内容
<?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;

    // ...
}
  1. 运行以下命令安装包并遵循安装步骤
php artisan moonshine-rbac:install
  1. (可选)创建一个具有新模型的新用户,并自动将"超级管理员"角色分配给它。
php artisan moonshine-rbac:user
  1. 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();
            }),

        //...
    );
}

用法

  1. 在MoonShine中创建管理面板中的部分
php artisan moonshine:resource Post
php artisan moonshine-rbac:permissions PostResource

您可以使用以下命令同时生成资源和权限

php artisan moonshine-rbac:resource Post
  1. 对于资源,添加以下内容
// ...
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

命令文档

在管理面板中看起来如何?