awcodes / filament-sentry
利用 Breezy、Shield 和自定义用户资源为 Filament 提供的基本认证框架。
v2.0.1
2023-06-04 23:09 UTC
Requires
- php: ^8.0.2
- bezhansalleh/filament-shield: ^2.0
- filament/filament: ^2.0
- jeffgreco13/filament-breezy: ^1.3
- spatie/laravel-package-tools: ^1.9.2
README
利用Filament Breezy、Filament Shield和自定义用户资源为 Filament 提供的基本认证框架。
安装
通过 composer 安装包
composer require awcodes/filament-sentry
发布配置文件。
这将发布 Sentry 的配置和具有更强默认密码规则的 Sentry 版本的 Breezy 配置。您可以随意修改。
php artisan vendor:publish --tag=filament-sentry-config
将HasFilamentShield
特质添加到您的用户模型中
use Illuminate\Foundation\Auth\User as Authenticatable; use BezhanSalleh\FilamentShield\Traits\HasFilamentShield; class User extends Authenticatable { use HasFilamentShield; // or HasRoles // ... }
安装 Shield
php artisan shield:install --fresh
通过电子邮件发送密码重置链接给新用户
Filament Sentry 具有在用户创建时通过电子邮件发送密码重置链接的能力,以便他们可以更容易地访问自己的密码。这通常只在您已禁用应用程序的注册时才需要。
此功能可以在配置文件中开启或关闭。使用 'noreply' 设置来设置将用作新用户电子邮件发送者的电子邮件地址。
'noreply' => 'example@example.com', 'email_new_users' => true
取消保护超级管理员
Filament Sentry 取消了具有 super_admin 角色的用户的保护,使他们可以绕过策略并完全控制系统。如果您不希望超级管理员拥有此权限,可以在配置中禁用它。
'unguard_super_admin' => false,
修改用户资源
要修改用户资源,您需要将资源/页面推入您的应用程序。这将发布资源/页面到app/Filament/Resources
,并更新 Sentry 配置文件中的user_resource
设置。
php artisan sentry:eject-resources
注意添加到用户中的任何额外字段都需要在创建用户和编辑用户资源页面中的$nonPermissionsFilter中添加。
// CreateUser.php protected function mutateFormDataBeforeCreate(array $data): array { $nonPermissionsFilter = ['name', 'email', 'password', 'bio', 'etc']; ... } // EditUser.php protected function mutateFormDataBeforeSave(array $data): array { $nonPermissionsFilter = ['name', 'email', 'password', 'bio', 'etc']; ... }
Seeder 参考(可选)
在database/seeders/DatabaseSeeder.php
或适当位置
use App\Models\User; use Spatie\Permission\Models\Role; use Illuminate\Support\Facades\Artisan; use Spatie\Permission\Models\Permission; $admin = Role::create(['name' => 'admin']) ->givePermissionTo(Permission::where('name', 'not like', '%_role')->get()); $editor = Role::create(['name' => 'editor']) ->givePermissionTo(Permission::where('name', 'not like', '%_role')->where('name', 'not like', '%_user')->get()); Artisan::call('shield:generate'); User::withoutEvents(function() { User::factory()->create([ 'name' => 'Tony Stark', 'email' => 'i.am@ironman.com', ])->assignRole('super_admin'); User::factory()->create([ 'name' => 'Pepper Pots', 'email' => 'pepper.pots@ironman.com', ])->assignRole('admin'); });