delgont/auth

Laravel 用户 - 权限 - 角色

安装: 15

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:项目

v1.3.0 2024-07-12 10:39 UTC

This package is auto-updated.

Last update: 2024-09-12 10:59:07 UTC


README

Laravel 身份验证后端

Composer Laravel 框架 6.0+

简介

Laravel 身份验证后端,提供以下功能。

  • 电子邮件或用户名认证
  • 使用角色和权限进行访问控制。
  • 使用角色和权限进行访问控制。

安装

composer require delgont/auth

php artisan vendor:publish --multiauth-config

多用户名认证

username email

  1. 登录控制器。

创建自定义登录控制器并使用 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';
    }
}
  1. 您的登录视图。
<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 系统资源、功能和功能的访问。

基于用户类型的访问控制

  1. 向您的可认证迁移添加 usertype & user_id
<?php
..............
Schema::table('users', function (Blueprint $table) {
    $table->nullableMorphs('user');
});
  1. 向用户模型添加 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;
  1. 您的用户类型模型
<?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