phpsa / filament-authentication
为 Filament Admin 的用户和角色(通过 Spatie Roles/Permissions)管理资源
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/support: ^9.0|^10|^11
- lab404/laravel-impersonate: ^1.7
- spatie/laravel-package-tools: ^1.13
- spatie/laravel-permission: ^5.5|^6.0
Requires (Dev)
- laravel/pint: ^1.2
- orchestra/testbench: ^7.0|^8.0|^9.0
- v5.0.0-rc.1
- v5.0.0-beta.1
- v5.0.0-alpha.1
- 4.x-dev
- v4.3.0-beta.2
- v4.3.0-beta.1
- v4.2.1
- v4.2.0
- v4.1.0
- v4.0.0
- v3.2.1
- v3.2.0
- v3.1.0
- v3.0.0
- 2.x-dev
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.0
- v2.2.1
- v2.2.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.1.0-beta.2
- v2.1.0-beta.1
- v2.0.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.1
- v1.0.0
- dev-main
- dev-route_tidy
- dev-18-impersonate-button-not-translated-in-default-user-view
- dev-beta
- dev-callback-for-widget-enabled
- dev-2-custom-userresource
This package is auto-updated.
Last update: 2024-09-11 22:51:53 UTC
README
Filament 用户身份验证
使用 Spatie 的角色和权限为 Filament Admin 提供用户资源
包安装
您可以通过 composer 安装此包
composer require phpsa/filament-authentication
并运行安装命令
php artisan filament-authentication:install
这将发布配置文件和迁移文件
可选地发布视图/翻译
artisan vendor:publish --tag=filament-authentication-views artisan vendor:publish --tag=filament-authentication-translations
Spatie 角色 & 权限
如果您尚未配置此包,它将由安装器自动添加,请执行以下步骤
- 您应该使用以下命令发布迁移和 config/permission.php 配置文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" php artisan migrate
-
将
Spatie\Permission\Traits\HasRoles
特性添加到您的 Users 模型中 -
添加所需的角色和权限
更多详情请见:https://spatie.be/docs/laravel-permission/v6/introduction
设置 & 配置
在您的 Filament 控板文件中,您需要在插件部分添加以下内容
添加资源
public function panel(Panel $panel): Panel { return $panel ... ->plugins([ \Phpsa\FilamentAuthentication\FilamentAuthentication::make(), ]) ...
您可以通过配置文件或插件进行配置
功能
1. 小部件
LatestUsersWidget
可以通过将其添加到您的面板小部件区域添加到您的仪表板中。
LatestUsersWidget::class
注意,如果存在策略,它也附加到 UserPolicy::viewAny 策略值
2. Laravel Impersonate
如果您尚未配置此包,它将由安装器自动添加,请执行以下步骤
- 将特性
Lab404\Impersonate\Models\Impersonate
添加到您的 User 模型中。 - 编辑配置文件,将 impersonate->enabled 设置为 true
定义模拟授权
默认情况下,所有用户都可以 模拟 用户。您需要将方法 canImpersonate()
添加到您的用户模型中
/** * @return bool */ public function canImpersonate() { // For example return $this->is_admin == 1; }
默认情况下,所有用户都可以 被模拟。您需要将方法 canBeImpersonated()
添加到您的用户模型中以扩展此行为
/** * @return bool */ public function canBeImpersonated() { // For example return $this->can_be_impersonated == 1; }
防止模拟
您可以使用中间件 impersonate.protect
来防止您的路由受到用户模拟的影响。此中间件在您想要保护特定页面(如用户订阅、用户信用卡等)时非常有用。
Router::get('/my-credit-card', function() { echo "Can't be accessed by an impersonator"; })->middleware('impersonate.protect');
事件 有两个可用的事件可用于改进您的流程
TakeImpersonation
在模拟时触发。LeaveImpersonation
在离开模拟时触发。
每个事件都返回两个属性 $event->impersonator
和 $event->impersonated
,它们包含 User 模型实例。
3. 密码更新
从 V4.2.0 版本引入 - 这允许您强制用户每 X 天更改一次密码。
启用此功能并按以下方式进行配置
- 将
Phpsa\FilamentAuthentication\Traits\CanRenewPassword
特性添加到您的用户模型中 - 在配置文件中配置修剪和更新周期选项
- 如果未发布,请发布迁移
artisan vendor:publish --tag filament-authentication-migrations
这将强制用户更新密码,请注意 - 所有现有用户最初都将被强制更新,这可以通过运行以下命令来忽略
身份验证日志
自 V4.2.0 版本引入 - 此功能允许您记录每个用户登录尝试。
启用此功能并按以下方式配置
- 将
Phpsa\FilamentAuthentication\Traits\LogsAuthentication
特性添加到您的用户模型中 - 在配置文件中配置 authentication_log 部分的修剪选项
- 可选地,在配置文件的导航部分启用该资源。
- 如果未发布,请发布迁移
artisan vendor:publish --tag filament-authentication-migrations
这将记录系统上的登录和注销操作。
安全
可以使用 Laravel 策略保护角色和权限,创建您的策略并在 AuthServiceProvider 中注册它们
protected $policies = [ Role::class => RolePolicy::class, Permission::class => PermissionPolicy::class, CustomPage::class => CustomPagePolicy::class, SettingsPage::class => SettingsPagePolicy::class // 'App\Models\Model' => 'App\Policies\ModelPolicy', ];
我们有一个自定义页面特性:Phpsa\FilamentAuthentication\Traits\PagePolicyTrait
和一个 Spatie 设置页面特性 Phpsa\FilamentAuthentication\Traits\SettingsPage\PolicyTrait
,您可以将它们添加到页面/设置页面中。通过定义一个模型并将其与 viewAny($user)
方法关联,您可以定义每个策略是否在导航中显示页面。
事件
Phpsa\FilamentAuthentication\Events\UserCreated
在通过资源创建用户时触发
Phpsa\FilamentAuthentication\Events\UserUpdated
在通过资源更新用户时触发
未来计划
- MFA 身份验证
- Socialite 身份验证
- 生物识别身份验证
变更日志
请参阅 变更日志 了解最近更改的详细信息。
鸣谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。