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

时间:2017-12-11 08:13:15

标签: laravel acl

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

1 个答案:

答案 0 :(得分:0)

以下是我对admin和Agent角色的访问控制的实现(根据您的使用情况调整此选项)。

我的用户表(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中的类

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注册您的中间件。 为此,请将此添加到位于$routeMiddleware的{​​{1}}的{​​{1}}

Kernel.php

确保为我们在中间件文件中提到的重定向创建正确的路由。 在此之后你几乎完成了。

现在验证用户是管理员还是普通用户将此添加到app\Http\Kernel.php的构造函数方法。

仅允许管理员执行操作

'admin' => 'App\Http\Middleware\Admin',
'agent' => 'App\Http\Middleware\Agent',

仅允许代理人采取行动,

controller

现在你的应用程序中有管理员和代理角色,你可以使用他们各自的中间件来控制每个人的访问权限!