chiiya / filament-access-control
Laravel Filament的管理员用户、角色和权限管理
Requires
- php: ^8.0|^8.1|^8.2|^8.3
- filament/filament: ^3.0
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.11
- spatie/laravel-permission: ^5.5|^6.4
Requires (Dev)
- chiiya/laravel-code-style: ^3.0
- orchestra/testbench: ^6.0|^7.1|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-21 13:09:04 UTC
README
Filament访问控制
为Laravel Filament管理管理员用户、角色和权限的意见性设置
功能
- 为Filament管理员用户单独的数据库表(单独的模型、单独的守卫、单独的密码经纪人)
- 使用spatie/laravel-permission进行角色和权限管理
- 完全本地化
- 管理员用户、角色和权限的CRUD资源
- 管理员用户可以属于一个角色
- 管理员用户可以直接拥有权限或通过其角色间接拥有权限
- 通过管理员界面创建管理员用户时,不需要指定密码。相反,用户会收到一封电子邮件,提示他们设置密码
- 可选的管理员账户过期。过期的账户将无法登录
- 可选的基于电子邮件的二次验证。
安装
- 通过Composer安装此包
composer require chiiya/filament-access-control
- 更新您的Filament Panel ServiceProvider并注册插件
use Chiiya\FilamentAccessControl\FilamentAccessControlPlugin; return $panel ->default() ->id('admin') ->path('admin') ->plugin(FilamentAccessControlPlugin::make())
您可能需要删除对login()
或其他配置认证过程的方法的调用,因为插件负责这些操作。
- 发布迁移和配置,然后运行迁移。确保您还发布了并运行了spatie/laravel-permission迁移(如果尚未执行)。
php artisan vendor:publish --tag="filament-access-control-migrations" php artisan vendor:publish --tag="filament-access-control-config" php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" php artisan migrate
-
要生成必要的基本数据(角色和权限),请运行
php artisan filament-access-control:install
或在您的数据库种子中调用Chiiya\FilamentAccessControl\Database\Seeders\FilamentAccessControlSeeder
种子。 -
使用
php artisan filament-access-control:user
创建管理员用户。如果您以编程方式创建用户(例如,在您的数据库种子中),请确保将它们分配给super-admin
角色,以便他们能够访问角色和用户管理。
可选地,您可以使用以下命令发布翻译:
php artisan vendor:publish --tag="filament-access-control-translations"
可选地,您可以使用以下命令发布视图:
php artisan vendor:publish --tag="filament-access-control-views"
使用
授权资源、页面和操作
授权资源
要授权对资源的访问,请使用如Filament文档中所述的策略。
class ProductPolicy { public function viewAny(FilamentUser $user): bool { return $user->can('products.view'); } // ... }
授权页面
此包包含一个简单的特性,您可以使用它根据权限授权对自定义页面的访问。
use Chiiya\FilamentAccessControl\Traits\AuthorizesPageAccess; class MyPage extends Page { use AuthorizesPageAccess; public static string $permission = 'my-page.view'; public function mount(): void { static::authorizePageAccess(); } }
授权操作
授权操作的一种方法是使用visible()
方法
ButtonAction::make('exports') ->visible(fn () => Filament::auth()->user()->can('exports.view'))
本地化角色和权限名称
角色和权限应具有易于在代码中使用的名称(例如admin-users.update
)。但是,对于管理员,您可能希望本地化它们或使它们更易于阅读。您可以通过简单地为给定的角色或权限名称添加JSON翻译条目来实现这一点(例如lang/en.json
)
{ "admin-users.update": "Admin Users → Edit" }
功能:账户过期
使用可选的账户过期功能,所有账户都需要过期日期。当账户过期时,它们将无法登录。要启用账户过期功能,请配置文件中的功能标志。
'features' => [ \Chiiya\FilamentAccessControl\Enumerators\Feature::ACCOUNT_EXPIRY, ],
您还需要将 EnsureAccountIsNotExpired
中间件添加到您的面板服务提供商中的 Filament 身份验证中间件配置
use Chiiya\FilamentAccessControl\Http\Middleware\EnsureAccountIsNotExpired; ... ->authMiddleware([ Authenticate::class, EnsureAccountIsNotExpired::class, ]);
特性:双因素认证
使用可选的双因素认证特性,用户在登录时必须输入通过电子邮件发送的验证码。要启用双因素认证特性,请在配置文件中启用功能标志
'features' => [ \Chiiya\FilamentAccessControl\Enumerators\Feature::TWO_FACTOR, ],
自定义用户模型
要使用您自己的自定义用户模型作为管理员(而不是 Chiiya\FilamentAccessControl\Models\FilamentUser
),请将 filament-access-control
配置文件中的 user_model
的值指向您的模型。
'user_model' => CustomFilamentUser::class,
请确保您的模型要么扩展了 FilamentUser
基类,要么实现了 Chiiya\FilamentAccessControl\Contracts\AccessControlUser
接口。
use Chiiya\FilamentAccessControl\Models\FilamentUser; use Chiiya\FilamentAccessControl\Contracts\AccessControlUser; use Filament\Models\Contracts\FilamentUser as FilamentUserInterface; use Filament\Models\Contracts\HasName; use Illuminate\Foundation\Auth\User as Authenticatable; class CustomFilamentUser extends FilamentUser { // ... } // Or alternatively class CustomFilamentUser extends Authenticatable implements AccessControlUser, FilamentUserInterface, HasName { // ... }
扩展资源
要扩展用于管理管理员用户、角色和权限的资源,您可以调整 resources
配置值
/* |-------------------------------------------------------------------------- | Resources |-------------------------------------------------------------------------- | Resources used for managing users, roles and permissions. */ 'resources' => [ 'user' => FilamentUserResource::class, 'role' => RoleResource::class, 'permission' => PermissionResource::class, ]
扩展资源最简单的方法是创建自己的资源类,这些类扩展了默认类,并覆盖以下方法
public static function insertBeforeFormSchema(): array
{
return [];
}
public static function insertAfterFormSchema(): array
{
return [];
}
public static function insertBeforeTableSchema(): array
{
return [];
}
public static function insertAfterTableSchema(): array
{
return [];
}
截图
更新日志
有关最近更改的更多信息,请参阅 更新日志
贡献
有关详细信息,请参阅 贡献指南
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件