awcodes/filament-sentry

利用 Breezy、Shield 和自定义用户资源为 Filament 提供的基本认证框架。

安装: 253

依赖: 0

建议者: 0

安全: 0

星标: 7

关注者: 2

分支: 1

开放问题: 0

类型:package

v2.0.1 2023-06-04 23:09 UTC

This package is auto-updated.

Last update: 2024-09-05 01:54:37 UTC


README

利用Filament BreezyFilament 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');
});