morphcms/acl-module

该软件包的最新版本(v0.0.0)没有可用的许可证信息。

为Morph CMS添加角色和权限功能

安装: 49

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 0

开放问题: 0

类型:laravel-module

v0.0.0 2022-08-01 09:37 UTC

This package is auto-updated.

Last update: 2024-09-12 20:00:31 UTC


README

TODO:添加安装和使用文档。

安装

使用

有关授权使用的详细信息,请参阅 spatie/laravel-permissions 软件包的文档。

约定

约定是使用点(`.`)作为分隔符的 resource.permission

星号(*)被称为通配符,表示资源的所有权限。

建议的方法是针对每个资源创建一个 enum,并将其权限分组。这提供了一种良好的智能感应并减少了输入错误。

示例

namespace Modules\Blog\Enums;

use Modules\Acl\Contracts\EnumsPermissions;

enum PostPermission: string
{
    case All = 'posts.*'; // wildcard permissions enabled by default
    case  ViewAdmin = 'posts.viewAdmin';
    case  ViewAny = 'posts.viewAny';
    case  View = 'posts.view';
    case  Create = 'posts.create';
    case  Update = 'posts.update';
    case  Delete = 'posts.delete';
    case  Replicate = 'posts.replicate';
    case  Restore = 'posts.restore';
}

然后在您的策略、控制器等中使用它,如下所示

$user->can(PostPermission::ViewAny->value);
// or obviously you can use it directly
$user->can('posts.viewAny');

权限播种

在您的Seeder中使用 AclBuilder 流畅API创建/附加权限。

namespace Modules\Blog\Database\Seeders;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;
use Modules\Acl\Utils\AclSeederHelper;
use Modules\Blog\Enums\PostPermission;

class RolesAndPermissionsSeeder extends Seeder
{
    use AclSeederHelper;

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run(): void
    {
        Model::unguard();

        $this->acl(module: 'blog')
            ->attachEnum(permissions: PostPermission::class, onlyPermissions:  PostPermission::All->value)
            ->create(moduleRoles: 'blogger');
            
        // OR You can set permissions directly.
        
        $this->acl(module: 'blog')
            ->attach(permissions: [
                'posts.*',
                'posts.viewAdmin',
                'posts.viewAny',
                'posts.view',
                'posts.create',
                'posts.update',
                'posts.delete',
            ], onlyPermissions:  'posts.*')
            ->create(moduleRoles: 'blogger');
    }
}