luilliarcec/filament-shield

`spatie/laravel-permission` 的丝材支持。

2.2.0 2022-11-03 15:27 UTC

This package is auto-updated.

Last update: 2024-09-30 02:05:23 UTC


README

将访问管理添加到您的 Filament Admin 的最简单、最直观的方式

  • 🔥 资源
  • 🔥 页面
  • 🔥 小部件

bezhanSalleh/filament-shield 分支而来

支持 Filament

filament-logo

安装

通过 composer 安装包

composer require luilliarcec/filament-shield

使用以下命令发布配置文件

php artisan vendor:publish --tag="filament-shield-config"

配置您的选项

<?php

return [
    /*
     * Predefined resource to handle system roles, you can replace it with your own.
     */
    'resources' => [
        'role' => Resources\RoleResource::class
    ],

    /*
     * System roles, enable them to your liking.
     */
    'roles' => [
        'super_admin' => [
            'enabled' => true,
            'role_name' => 'super_admin',
        ],

        'filament_user' => [
            'enabled' => false,
            'role_name' => 'filament_user',
        ],
    ],

    /**
     * Default global permissions are defined here, however you are free to change
     * them from your filament `resource`, `page` or `widget`.
     */
    'suffixes' => [
        'resource' => [
            'view_any',
            'view',
            'create',
            'update',
            'delete',
            'delete_any',
            'restore',
        ],
        'page' => 'view',
        'widget' => 'view',
    ],

    /**
     * The package uses a wildcard format with "-" instead of dots, due to the representation of objects
     * that livewire gives you, when using this format, the package discovers the segments
     * from the namespace of the filament `resource`, `page` or `widget`.
     *
     * {module}.{resource}.{action} => {module}-{resource}-{action}
     *
     * Filament
     *   - Resources
     *     - Security
     *       - RoleResource.php
     *
     * App\Filament\Resources\Security\RoleResource
     *
     * Ex.: security-role-view_any
     */

    'dont_modules' => [
        'src',
        'domain',
        'manages',
        'app',
        'filament',
        'resources',
        'pages',
        'widgets',
    ]
];

Spatie\Permission\Traits\HasRoles 特性添加到您的用户模型中

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}

如果您想生成权限以及策略,请使用以下命令

php artisan shield:generate

该包足够智能,可以在与 filament 资源关联的模型相同的命名空间中生成策略。

为了使用此包,每个 resourcepagewidget 必须实现以下合约。

Luilliarcec\FilamentShield\Contracts\HasPermissions

use Filament\Resources\Resource;
use Luilliarcec\FilamentShield\Contracts\HasPermissions;

class RoleResource extends Resource implements HasPermissions
{
    // 
}

您必须实现每个方法,或者如果您喜欢,可以为每个案例(resourcepage 或 `widget)使用特性。

use Filament\Resources\Resource;
use Luilliarcec\FilamentShield\Contracts\HasPermissions
use Luilliarcec\FilamentShield\Concerns\HasResourcePermissions;

class RoleResource extends Resource implements HasPermissions
{
    use HasResourcePermissions;
}

如果您想为生成资源添加或删除权限,可以重写权限方法。

use Filament\Resources\Resource;
use Luilliarcec\FilamentShield\Contracts\HasPermissions;
use Luilliarcec\FilamentShield\Concerns\HasResourcePermissions;

class RoleResource extends Resource implements HasPermissions
{
    use HasResourcePermissions;
    
    //

    public static function permissions(): array|string
    {
        return [
            'view_any',
            'export'
        ];
    }
}

现在这个资源将只有两个权限。

变更日志

请参阅 CHANGELOG 了解最近更改的信息。

贡献

如果您想为这些包做出贡献,您可能想在真实的 Filament 项目中测试它

  • 将此仓库分支到您的 GitHub 账户
  • 在本地创建 Filament 应用
  • 在 Filament 应用根目录中克隆您的分支
  • /filament-shield 目录中,为您的修复创建一个分支,例如 fix/error-message

在您的应用的 composer.json 中安装包

致谢

许可协议

MIT 许可协议 (MIT)。请参阅 许可文件 了解更多信息。