zofe / auth-module
适用于 rapyd-livewire 应用的身份验证模块
Requires
- php: ^8.2
- illuminate/config: ^11.0
- illuminate/contracts: ^11.0
- lab404/laravel-impersonate: ^1.7.5
- laravel/fortify: ^v1.21.3
- propaganistas/laravel-disposable-email: ^2.4.0
- spatie/laravel-permission: ^6.7.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: 11.0.10
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.table
和 tickets.tickets.view
将由您自定义的组件实现提供服务(这可以扩展默认的工单模块组件)
安装与配置
此模块是 Rapyd Admin 包的一部分