althinect / filament-spatie-roles-permissions
Requires
- php: ^8.1|^8.2
- filament/filament: ^3.0
- illuminate/support: ^9|^10|^11
- spatie/laravel-permission: ^5.4|^6.0
Requires (Dev)
- laravel/pint: ^1.10
- orchestra/testbench: ^7.0|^9.0
- phpunit/phpunit: ^9.0|^10.5
- 2.x-dev
- v2.2.32
- v2.2.31
- v2.2.30
- v2.2.29
- v2.2.28
- v2.2.27
- v2.2.26
- v2.2.25
- v2.2.24
- v2.2.23
- v2.2.22
- v2.2.21
- v2.2.20
- v2.2.19
- v2.2.18
- v2.2.17
- v2.2.16
- v2.2.15
- v2.2.14
- v2.2.13
- v2.2.12
- v2.2.11
- v2.2.10
- v2.2.9
- v2.2.8
- v2.2.7
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.1
- v2.0.14
- v2.0.13
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0
- 1.x-dev
- v1.3.10
- v1.3.9
- v1.3.8
- v1.3.7
- v1.3.6
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.9
- v1.1.8
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-main
- dev-fix/tenancy-missing-id
This package is not auto-updated.
Last update: 2024-09-21 17:27:51 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"
不要忘记将 HasRoles
特性添加到您的用户模型中。
// The User model requires this trait use HasRoles;
使用方法
表单
您可以将以下内容添加到您的用户资源中的 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。
ℹ️ 信息: Laravel 11 移除了
AuthServiceProvider
,因此在这种情况下,我们需要使用AppServiceProvider
。
use App\Policies\RolePolicy; use App\Policies\PermissionPolicy; use Spatie\Permission\Models\Role; use Spatie\Permission\Models\Permission; Gate::policy(Role::class, RolePolicy::class); Gate::policy(Permission::class, PermissionPolicy::class);
忽略提示
您可以通过添加标志 -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
的角色模型 - 将
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 包模板 生成。