zofe/auth-module

适用于 rapyd-livewire 应用的身份验证模块

安装: 313

依赖项: 2

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:rapyd-module

0.11.13 2024-06-13 10:02 UTC

README

这是 Rapyd Admin 的身份验证模块,Rapyd Admin 是一个 Laravel 应用程序引导程序,适用于您的项目

它包含

  • 登录、注册、双因素认证
  • 角色/权限管理
  • 用户管理
  • 化身功能。
  • 组件权限和“基于角色”的优先级

登录/注册 & 双因素认证

此模块提供了开箱即用的 fortify 实现 https://laravel.net.cn/docs/10.x/fortify#main-content,并带有引导布局和默认配置,您可以在 ./config/fortify.php 中进行自定义

权限 & 模型

此模块将提供两个模型

  • 角色
  • 权限

正如您所想象的,角色是可以与用户关联的特性,权限是授予该角色的“操作”。

模块有一个配置文件,允许您定义角色、权限以及它们之间的关系。

可编辑的配置在 ./config/permission.php 中提供。然后您需要运行提供的 Seeder。

这些功能基于库:https://github.com/spatie/laravel-permission

化身

在实现后端时,必要的功能之一是模拟其他用户/客户,此模块内置了此功能

此模块包含一个特质 App\Modules\Auth\Traits\Impersonate,用于检查用户是否可以模拟其他用户,并检查用户是否可以被模拟。

默认情况下,此特质会添加检查是否为管理员以及您要模拟的用户不是管理员(使用角色)。

对于自定义实现,在您的模型中重写 canImpersonate()canBeImpersonated()

use App\Modules\Auth\Traits\Impersonate;

class User extends Model
{
  use Impersonate;

此功能基于库:https://github.com/lab404/laravel-impersonate

组件角色 & 权限

授权特质

此模块包含一个特质 App\Modules\Auth\Traits\Authorize,用于在构建/渲染/执行组件操作之前检查角色或权限。

您只需包含此特质,然后在组件的 booted 时刻添加授权检查

use App\Modules\Auth\Traits\Authorize;

class CompaniesEdit extends Component
{
    use Authorize;

    public function booted()
    {
        $this->authorize('admin|edit users');
    }

这将检查是否有角色或权限应用于已登录用户,否则会给出权限错误。

限制特质

此模块包含一个特质 App\Modules\Auth\Traits\Limit,用于添加全局作用域到您的应用程序中,特定于角色您需要将 eloquent 模型限制到特定的查询作用域。

<?php

namespace App\Modules\Companies\Livewire;

use App\Models\Company;
use App\Modules\Auth\Traits\Limit;
use Livewire\Component;

class CustomersTable extends Component
{
    use Limit;

    public function booted()
    {
        $this->limit();
    }

booted 方法内的限制将处理 Modules/*/Limits/LimitName.php 中的所有类,以添加特定的全局作用域。在下面的示例中,向 Company 模型添加了一个全局作用域,以确保将查询绑定到与已登录用户相同的公司,或者与已登录用户所属的“女儿”公司。

<?php

namespace App\Modules\Companies\Limits;

use App\Models\Company;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;

class CompanyLimit
{
    public static function limit($except = [])
    {
        $user = auth()->user();

        Company::addGlobalScope('onlyMine', function (Builder $builder) use (auth()->user()) {
            $builder->where('parent_id', $user->company_id)
                ->orWhere('id', $user->company_id)
        });
    }

}

组件优先级基于角色

此模块提供开箱即用的中间件,用于查找优先组件而不是路由默认的组件。

“优先组件”是指以已登录用户的“角色名”为前缀的组件,例如,尽管定义了路由

路由:Route::get('/companies/view/{company:id}', CompaniesView::class)

Customer 角色用户使用中间件查找 CustomerCompaniesView::class 并提供该类(如果存在)。

这允许您扩展 Livewire 组件,并针对每个需要管理的 角色 适配功能和视图(如果您需要这样做)。

只需在配置中配置您的前缀

    'role_to_component_prefix' => [
        'customer' => 'customer'
    ],

在您的 app/Http/Kernel.php 文件中添加中间件

    protected $middlewareGroups = [
        'web' => [
            //..
            \App\Modules\Auth\Http\Middleware\ComponentByRole::class,
        ],
    ]

将组件角色与组件特定路由关联

假设您正在使用 Ticket 开源模块,您可以通过以下方式自定义角色,例如 "customer",来打开工单:

    'role_to_component_class' => [
        'customer' => [
            'tickets.tickets.table' => \App\Components\Tickets\UserTicketsTable::class,
            'tickets.tickets.view' => \App\Components\Tickets\UserTicketsView::class
        ],

    ],

这种方式,路由 tickets.tickets.tabletickets.tickets.view 将由您自定义的组件实现提供服务(这可以扩展默认的工单模块组件)

安装与配置

此模块是 Rapyd Admin 包的一部分