如何在 Laravel 中实施基于角色的身份验证和访问控制

How to implements Role based Authentication and Access Control in Laravel

我想使用 laravel 创建具有访问权限的基于角色的登录。我想在没有任何第三方库的情况下开发它。我怎样才能以最好和有效的方式开发它。

这是我对管理员和代理角色的访问控制的实现(根据您的用例进行调整)。

我的用户 table(is_admin) 中有一个布尔字段,对于代理是 0,对于管理员是 1。所以在我的User model中我做了这个

protected $casts = [
    'is_admin' => 'boolean',
];

public function isAdmin()
{
        return $this->is_admin;
}

为您想要使用的角色类型创建一个新的middleware

$php artisan make:middleware Admin

$php artisan make:middleware Agent

中间件文件将在 App\Http\Middleware 中创建\将其添加到 Admin.php

中的 class
public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->isAdmin() ){

        return $next($request);
    }

    return redirect('/agent');

}

这对 Agent.php

public function handle($request, Closure $next)
{

    if (Auth::check() && !Auth::user()->isAdmin()){

        return $next($request);
    }

    return redirect('/admin');

}

之后用 laravel 注册你的中间件。 为此,请将此添加到位于 app\Http\Kernel.php

Kernel.php 中的 $routeMiddleware
'admin' => 'App\Http\Middleware\Admin',
'agent' => 'App\Http\Middleware\Agent',

确保创建正确的重定向路由,正如我们在中间件文件中提到的那样。 在这之后你就差不多完成了。

现在要验证用户是管理员还是普通用户,请将其添加到 controller.

的构造方法中

只允许管理员执行的操作,

    public function __construct()
    {   
        $this->middleware('admin');
    }

仅允许代理人执行的操作,

    public function __construct() 
    {
        $this->middleware('agent');
    }

就是这样,现在您在您的应用程序中拥有管理员和代理角色,您可以通过使用他们各自的中间件来控制对他们每个人的访问!