delgont / auth
Laravel 用户 - 权限 - 角色
v1.3.0
2024-07-12 10:39 UTC
Requires
- php: ^7.2.5 || ^8.0
- illuminate/auth: ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
- illuminate/database: ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
- illuminate/support: ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
- laravel/helpers: ^1.5.0 || 1.6.0 || 1.7.0
README
Laravel 身份验证后端
Composer
Laravel 框架 6.0+
简介
Laravel 身份验证后端,提供以下功能。
- 电子邮件或用户名认证
- 使用角色和权限进行访问控制。
- 使用角色和权限进行访问控制。
安装
composer require delgont/auth
php artisan vendor:publish --multiauth-config
多用户名认证
username
email
- 登录控制器。
创建自定义登录控制器并使用
Delgont\Auth\Concerns\MultiAuthCredentials
这将覆盖凭证函数
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Delgont\Auth\Concerns\MultiAuthCredentials;
use Illuminate\Http\Request;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller - Multi Authentication using email or username
|--------------------------------------------------------------------------
| Use Delgont\Auth\Concerns\MultiAuthCredentials trait
| You must override the credentials and username functions as shown below
|
*/
use AuthenticatesUsers, MultiAuthCredentials;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function credentials(Request $request)
{
return $this->multiAuthCredentials($request);
}
public function username()
{
return 'username_email';
}
}
- 您的登录视图。
<input id="username_email" type="text" class="form-control @error('username_email') is-invalid @enderror" name="username_email" value="{{ old('username_email') }}" required autocomplete="username_email" autofocus> @error('username_email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror
访问控制
调节对您的 Laravel 系统资源、功能和功能的访问。
基于用户类型的访问控制
- 向您的可认证迁移添加
usertype
&user_id
列
<?php .............. Schema::table('users', function (Blueprint $table) { $table->nullableMorphs('user'); });
- 向用户模型添加
Delgont\Auth\Concerns\HasUserTypes
特性。
<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Delgont\Cms\Notifications\Auth\ResetPassword as ResetPasswordNotification; use Delgont\Auth\Concerns\HasUserTypes; class User extends Authenticatable { use Notifiable, HasUserTypes, ModelHasPermissions, ModelHasSingleRole;
- 您的用户类型模型
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Customer extends Model { public function user() { return $this->morphOne('App\User', 'user'); } }
用户可以有一个或多个角色
使用角色中间件来限制访问
在您的可认证模型上使用 Delgont\Auth\Concerns\ModelHasRoles
特性
<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Delgont\Auth\Concerns\ModelHasRoles; class User extends Authenticatable { /* | Use Delgont\Auth\Concerns\ModelHasRoles trait | */ use ModelHasRoles; }
分配角色
# Giving role using role names $model->assignRole(['admin','accountant']); auth()->user()->assignRole(['admin','accountant']);
使用角色中间件保护路由
Route::get('/test', 'TestController@test')->middleware('role:admin'); Route::get('/test', 'TestController@test')->middleware('role:admin|hello');
使用权限中间件来限制访问
Route::get('/momo', 'Momo@index')->name('momo')->middleware('permission:access_momo_dashboard');
在权限配置文件中配置默认权限
<?php
return [
'delimiter' => '|',
'permissions' => [
'manage_users',
'access_momo_dashbaord'
]
];
`
Artisan 命令
角色
php artisan make:roleRegistrar Roles/ExampleRoleRegistrar
php artisan role:sync