chiiya/filament-access-control

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

2.4.2 2024-06-21 12:32 UTC

README

filament-access-control

Filament访问控制

Latest Version on Packagist GitHub Code Style Action Status Total Downloads

Laravel Filament管理管理员用户、角色和权限的意见性设置

功能

  • 为Filament管理员用户单独的数据库表(单独的模型、单独的守卫、单独的密码经纪人)
  • 使用spatie/laravel-permission进行角色和权限管理
  • 完全本地化
  • 管理员用户、角色和权限的CRUD资源
  • 管理员用户可以属于一个角色
  • 管理员用户可以直接拥有权限或通过其角色间接拥有权限
  • 通过管理员界面创建管理员用户时,不需要指定密码。相反,用户会收到一封电子邮件,提示他们设置密码
  • 可选的管理员账户过期。过期的账户将无法登录
  • 可选的基于电子邮件的二次验证。

安装

  1. 通过Composer安装此包
composer require chiiya/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 身份验证中间件配置

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)。有关更多信息,请参阅 许可文件