seblhaire / authbase
Requires
- php: >=8.0
- illuminate/http: ^11.0
This package is auto-updated.
Last update: 2024-09-19 19:44:50 UTC
README
由 Sébastien L'haire](http://sebastien.lhaire.org)
此库是用户管理和认证的基础包,可以被其他包使用,例如
包 Laravel Breeze 非常有用。然而,用户可以自动注册,这并不总是方便。相反,您可能需要应用账户由具有管理员权限的用户创建。
基础包提供
- 模型和表填充器
- 基本的密码重置通知
- 密码重置服务提供者
- 密码经纪人
- 密码设置和重置电子邮件模板
- 其他包可用的特性
安装
- 我们强烈建议您不要单独安装此包。我们建议您根据您的需求安装上述提到的包之一。但如果您只想使用此包,请使用
composer require seblhaire/authbase
- Composer 会自动将包与 Laravel 链接。但您仍然可以在您的
config/app.php
中显式添加提供者和外观。
'providers' => [ Seblhaire\Authbase\ProvidersAuthbaseServiceProvider::class, Seblhaire\Authbase\ProvidersPasswordResetServiceProvider::class ]
配置
配置文件
在发布包之后,修改文件 authbase.php
以适应您的应用程序。配置可以通过以下方式访问:
config('authbase')
resetpasswordnotification
:用于发送密码重置邮件的通知类。参见下文。createpasswordnotification
:用于发送用户创建邮件的通知类。参见下文。roles
:列出应用程序的 用户角色。将用于 数据库表。默认:['administrator', 'standard_user']
。profile
:列出应用程序的 用户配置文件项。将用于 数据库表。默认:[]
。
邮件配置
您的应用程序必须能够使用 Laravel 官方文档中的一种方法发送邮件。
模板
电子邮件模板
您还应该调整电子邮件模板以适应您的应用程序。模板可以在 resources/views/vendor/authbase/public/emails
中找到。您可以定义应用程序的页眉和页脚。所有由应用程序发送的邮件都可以共享相同的布局。最后,邮件内容可以在 public/emails/email.blade.php
中定义。请随意根据您的需求进行调整。应用程序发送的邮件内容在下文描述。
数据库迁移
本包包含一个数据库迁移文件0000_00_00_000000_baseauth_tables.php
,其中包含所有必要的Laravel迁移。然后运行php artisan migrate:install
。确保配置文件specialauth.php
已完整填写了角色和配置文件,并最终运行迁移php artisan migrate --seed --seeder=UsersTableSeeder
以创建和填充表格。稍后您需要创建您的第一个用户。
通知
我们需要设置两个通知,为新用户创建密码以及为忘记密码的用户重置密码。此包提供了一个抽象类Seblhaire\Authbase\Notifications\ResetPassword
,必须在您的应用程序中扩展并定义以下方法
public function buildMessage($url, $user): MailMessage
此方法必须返回一个Illuminate\Notifications\Messages\MailMessage
类的对象
public function getRoute(): string;
此方法返回一个字符串,标识用户将被重定向到设置或重置密码的路由。
您可以将example/Notifications
中的代码复制或修改后放入您的应用程序的app/Notifications
目录。
然后,您必须编辑文件authbase.php
并提供通知类,例如
return [
'resetpasswordnotification' => App\Notifications\ResetPasswordNotification::class,
'createpasswordnotification' => App\Notifications\CreatePasswordNotification::class,
];
用户角色和配置文件
此包修改了默认的Laravel用户模型,并添加了角色和配置文件表。模型\Seblhaire\Specialauth\Models\User
使用Laravel标准特性,并为Role
和Profile
模型添加了Eloquent关系。如果您的应用程序需要更多关系,例如链接到日志,您可以扩展我们的User
模型。
配置文件
您必须首先将配置文件名添加到profiles
表中,例如将skin
添加到选择主题,将table_max_element
添加到获取用户在表格中喜欢的元素数量等。当您创建应用程序时,您可以在配置文件中定义配置文件项,并将其种子到数据库中。您可以在应用程序的新版本中添加新配置文件或在应用程序中执行此操作。
配置文件通过profile_user
表附加到用户。配置文件值存储在jsonvals
交叉值中。您只需存储一个JSON对象,例如{"val": 20}
或更复杂的对象结构。
您可以使用$user->profiles()->attach(1, ['jsonvals' => '{"val":' . config('tablebuilder.table.itemsperpage') . '}'])
将配置文件附加到用户,其中值1代表profiles
表中配置文件值的id
。此处配置值是指包TableBuilder中的默认表格大小值。要更改此值,我们建议首先使用$user->roles()->detach(1);
解除关联,然后附加新值。
如果您需要访问当前用户的配置文件值,请使用\Auth::user()->profile('table_max_element')->val
来检索此配置文件项的值。
角色
首先,您应该为应用程序的用户精确定义不同的角色。通常,应用程序定义可以执行所有操作的超级用户和只能执行普通任务的普通用户。但您也可以定义更多角色。当创建应用程序时,数据库迁移部分显示了如何自动插入应用程序的角色。然而,当更新应用程序时,您可以轻松创建新角色,或者应用程序也可以允许用户插入新角色。
用户至少应该有一个角色,但表结构允许用户有多个角色。
要将角色分配给用户,请使用$user->roles()->attach(1)
将具有id
1的roles
表中的角色附加。要更新角色,首先使用$user->roles()->detach()
解除所有角色,然后重新附加更新后的列表。
如果您需要知道用户是否有角色,请使用$user->hasRole('administrator')
。
然后您必须定义如何在您的应用程序中使用角色。
策略和权限门
策略定义了必须满足的条件,以便允许在控制器中使用操作。例如,要更新用户,您必须是该用户或具有管理员角色。要显示用户信息,您必须是该用户。
策略不能在包中定义并自动加载。因此,您需要定义自己的策略。我们已经编写了trait Seblhaire\Authbase\Traits\PolicyTrait
,可以在您的策略中使用。首先,您必须创建一个策略类
php artisan make:policy UserPolicy
然后像示例 example/Policies/UserPolicy.php
一样使用我们的trait。最后,在控制器中,您可以像这样使用策略
if (\Auth::user()->cant('update_user', $user)) return redirect()->route('adminhome')
Laravel 权限门是闭包,用于确定用户是否有权限执行特定操作。我们还提供了trait Seblhaire\Authbase\Traits\GateTrait
,可以在您的提供者与您的策略一起使用。权限门可以使用示例 example/routes/web.php
中的示例。
要使用策略和权限门,您必须编写一个简单的提供者,如示例中的提供者 App\Providers\AuthServiceProvider
,位于 examples/Providers/AuthServiceProvider.php
。只需将其添加到您的应用程序的 config/app.php
文件中的 providers
数组。
特质
在 src/Traits
中,我们提供了有用的特质。我们已经提到了 Seblhaire\Authbase\Traits\PolicyTrait
和 Seblhaire\Authbase\Traits\GateTrait
。
Seblhaire\Authbase\Traits\CanResetPassword
基于 Illuminate\Auth\Passwords\CanResetPassword
。它由用户模型 Seblhaire\Authbase\Models\User
使用,该模型可以被其他包和您的应用程序扩展。
特质 Seblhaire\Authbase\Traits\RoleUtils
和 Seblhaire\Authbase\Traits\ProfileUtils
提供了将 Seblhaire\Authbase\Models\Profile
和 Seblhaire\Authbase\Models\Role
连接到您的用户模型的方法。
翻译键
原始翻译存储在 vendor/seblhaire/authbase/resources/lang
之下。如果您发布包文件,您可以在 resources/lang/vendor/authbase/
中找到翻译。
请随意将键翻译成您自己的语言,并将翻译发送给作者或直接在GitHub上发起合并请求。
有问题?有贡献?
请随意向作者发送功能请求或合并请求,或者简单地提出问题。