eddusoft/filament-access-control-2fa

Laravel Filament 的管理员用户、角色和权限管理

v1.0.1 2024-04-07 08:55 UTC

README

filament-access-control

Filament Access Control

Latest Version on Packagist GitHub Code Style Action Status Total Downloads

针对 Laravel Filament 管理员用户、角色和权限的设定化配置

此包是从 https://github.com/chiiya/filament-access-control 存储库改编而来

功能

  • 添加 https://github.com/jeffgreco13/filament-breezy
  • 为 Filament 管理员用户使用单独的数据库表(单独的模型、单独的守卫、单独的密码中介)
  • 使用 spatie/laravel-permission 处理角色和权限
  • 完全本地化
  • 管理员用户、角色和权限的 CRUD 资源
  • 管理员用户可能属于 一个 角色
  • 管理员用户可以拥有直接权限或通过其角色获得的间接权限
  • 通过管理员界面创建管理员用户时,不指定密码。相反,用户会收到一封电子邮件,提示他们设置密码
  • 管理员用户的可选账户过期。过期的账户将无法登录
  • 可选的基于电子邮件的两因素认证。

安装

  1. 使用 composer 安装此包
composer require eddusoft/filament-access-control
  1. 更新您的 Filament Panel ServiceProvider 并注册插件
use Chiiya\FilamentAccessControl\FilamentAccessControlPlugin;

return $panel
    ->default()
    ->id('admin')
    ->path('admin')
    ->plugin(FilamentAccessControlPlugin::make())

您可以删除对 login() 或其他配置认证过程的方法的调用,因为插件会处理这些。

  1. 发布迁移和配置,然后运行迁移。确保您还发布了并运行了 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
  1. 要生成必要的基本数据(角色 & 权限),运行 php artisan filament-access-control:install 或在您的数据库种子器中调用 Chiiya\FilamentAccessControl\Database\Seeders\FilamentAccessControlSeeder 种子器。

  2. 使用 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 [];
    }

截图

Screenshot of Admin Users - View Screenshot of Roles - Edit Screenshot of Account Expired Screenshot of Two-Factor Authentication

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

许可协议

MIT许可协议(MIT)。有关更多信息,请参阅许可文件