liberusoftware/filament-spatie-roles-permissions

v2.3.1 2024-02-27 21:31 UTC

This package is not auto-updated.

Last update: 2024-09-25 22:23:29 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

此插件基于 Spatie的权限 包构建。

提供角色和权限的资源

权限和政策生成

  • 检查 config/filament-spatie-roles-permissions-config.php

支持团队权限

  • 确保 config/permission.php 文件中的 teams 属性设置为 true

更新

执行 composer update 后,运行

php artisan vendor:publish --tag="filament-spatie-roles-permissions-config" --force

注意:您现有的设置将被覆盖

如果您喜欢我们的工作,请别忘了给项目 STAR

安装

您可以通过 composer 安装此包

composer require althinect/filament-spatie-roles-permissions

由于该包依赖于 Spatie的权限 包。您必须运行以下命令来发布迁移

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

将插件添加到 AdminPanelProvider

use Althinect\FilamentSpatieRolesPermissions\FilamentSpatieRolesPermissionsPlugin;

$panel
    ...
    ->plugin(FilamentSpatieRolesPermissionsPlugin::make())

现在您应该添加 Spatie-Permission 包所需的任何其他配置。

注意: 这将覆盖您现有的配置文件。您可以使用以下命令发布包的配置文件

php artisan vendor:publish --tag="filament-spatie-roles-permissions-config" --force

您可以使用以下命令发布翻译

php artisan vendor:publish --tag="filament-spatie-roles-permissions-translations"

用法

表单

您可以将以下内容添加到 UserResource 中的 form 方法

return $form->schema([
    Select::make('roles')->multiple()->relationship('roles', 'name')
])

除了添加到 UserResource 的字段外,还将发布两个位于 角色和权限 下的资源。您可以使用这些资源来管理角色和权限。

生成权限

您可以通过运行以下命令来生成权限

php artisan permissions:sync

这将不会删除任何现有的权限。但是,如果您想删除所有现有的权限,请运行

php artisan permissions:sync -C|--clean

示例

如果您有一个 Post 模型,它将生成以下权限

view-any Post
view Post
create Post
update Post
delete Post
restore Post
force-delete Post
replicate Post
reorder Post

生成策略

要生成策略,请使用以下命令。这将不会替换任何现有的策略

php artisan permissions:sync -P|--policies

覆盖现有策略

这将覆盖现有的策略类

php artisan permissions:sync -O|--oep

角色和权限策略

如果您想控制导航菜单上资源的可见性,请创建一个 RolePolicy 和 PermissionPolicy。请确保将它们添加到 AuthServiceProvider。

忽略提示

您可以通过添加标志 -Y--yes-to-all 来忽略任何提示

仅推荐用于新项目,因为它将替换策略文件

php artisan permissions:sync -COPY

添加超级管理员

  • 创建一个名为 Super Admin 的角色并将该角色分配给用户
  • 将以下特质添加到用户模型
use Althinect\FilamentSpatieRolesPermissions\Concerns\HasSuperAdmin;

class User extends Authenticatable{

...
use HasSuperAdmin;
  • 在 AuthServiceProvider 的 boot 方法中添加以下内容
Gate::before(function (User $user, string $ability) {
    return $user->isSuperAdmin() ? true: null;     
});

守卫名称

当您使用除 web 以外的任何守卫时,您必须将守卫名称添加到 config/auth.php 文件中。例如:如果您使用 api 守卫,您应该在 guards 数组中添加以下内容

'guards' => [
    ...

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

多租户

  • 请确保在 config/permission.php 上设置以下内容
'teams' => true
  • 请确保 config/permission 上的 team_model 设置正确。
  • 创建一个继承自 Spatie\Permission\Models\Role 的 Role 模型
  • config/permission.php 中的模型替换为新创建的模型
  • 在两个模型中添加 team 关系
...
public function team(): BelongsTo
{
    return $this->belongsTo(Team::class);
}
  • 将以下内容添加到 AdminPanelProvider 以支持多租户
use Althinect\FilamentSpatieRolesPermissions\Middleware\SyncSpatiePermissionsWithFilamentTenants;

$panel
    ...
    ->tenantMiddleware([
        SyncSpatiePermissionsWithFilamentTenants::class,
    ], isPersistent: true)
  • 在您的 UserResource 中使用以下内容
Forms\Components\Select::make('roles')
            ->relationship(name: 'roles', titleAttribute: 'name')
            ->saveRelationshipsUsing(function (Model $record, $state) {
                 $record->roles()->syncWithPivotValues($state, [config('permission.column_names.team_foreign_key') => getPermissionsTeamId()]);
            })
           ->multiple()
           ->preload()
           ->searchable(),

请遵循Filament 多租户上的说明。

配置

filament-spatie-roles-permissions.php 配置文件中,您可以自定义权限生成。

安全

如果您发现任何与安全相关的问题,请创建一个工单。

致谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅许可证文件

Laravel 包模板

本包使用Laravel 包模板生成。