eddusoft / filament-access-control-2fa
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
- jeffgreco13/filament-breezy: ^2.1
- spatie/laravel-package-tools: ^1.11
- spatie/laravel-permission: ^5.5|^6.4
Requires (Dev)
- chiiya/laravel-code-style: ^2.2
- orchestra/testbench: ^6.0|^7.1|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-29 01:27:56 UTC
README
Filament Access Control
针对 Laravel Filament 管理员用户、角色和权限的设定化配置
此包是从 https://github.com/chiiya/filament-access-control 存储库改编而来
功能
- 添加 https://github.com/jeffgreco13/filament-breezy 包
- 为 Filament 管理员用户使用单独的数据库表(单独的模型、单独的守卫、单独的密码中介)
- 使用 spatie/laravel-permission 处理角色和权限
- 完全本地化
- 管理员用户、角色和权限的 CRUD 资源
- 管理员用户可能属于 一个 角色
- 管理员用户可以拥有直接权限或通过其角色获得的间接权限
- 通过管理员界面创建管理员用户时,不指定密码。相反,用户会收到一封电子邮件,提示他们设置密码
- 管理员用户的可选账户过期。过期的账户将无法登录
- 可选的基于电子邮件的两因素认证。
安装
- 使用 composer 安装此包
composer require eddusoft/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 auth中间件配置。
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)。有关更多信息,请参阅许可文件。