liberusoftware / filament-spatie-roles-permissions
Requires
- php: ^8.1|^8.2
- filament/filament: ^3.2
- spatie/laravel-permission: ^5.4|^6.0
Requires (Dev)
- laravel/pint: ^1.12
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^11.0
This package is not auto-updated.
Last update: 2024-09-25 22:23:29 UTC
README
此插件基于 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 包模板生成。