如何通过多个用户保护控制器?

时间:2017-04-22 10:40:41

标签: php laravel-5.4 guard laravel-middleware

这是项目要求。我有多个登录但有些用户无法访问少数模块。像超级管理员和分析师可以访问所有模块,但开发人员只能使用自己的控制器。

所以在这种情况下,如何保护具有多次登录的控制器。还要注意我在数据库中有单独的登录页面和表格。

例如,电话簿控制器可以由超级管理员和分析师访问,但不能由开发人员访问。 所以请告诉我如何实现这个?

我将其用于::

if( Auth::guard('superAdmin')->check() )
 {   $author =Auth::guard('superAdmin')->User()->id ;  }
  else  if( Auth::guard('analysts')->check() )
 {   $author =Auth::guard('analysts')->User()->id;   }
 else
 {  $author =Auth::guard('supervisor')->User()->id    }

我想将它用于类

的构造函数方法

1 个答案:

答案 0 :(得分:1)

以下是我对管理员和用户(代理商)的访问控制实现 我的用户表(boolean)中有is_admin字段,普通用户为0,管理员为1。所以在我的用户模型中我做了这个

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

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

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

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('/home');

}

在此之后注册带有laravel的中间件,将其添加到位于protected $routeMiddleware的Kernel.php中的app\Http\Kernel.php

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

确保为我们在中间件文件中提到的重定向创建正确的路由。 在此之后你几乎完成了。现在验证用户是管理员还是普通用户将其添加到控制器的构造函数方法中。

仅允许管理员用户执行操作

    public function __construct()
{   

    $this->middleware('auth');
    $this->middleware('admin');
}

仅允许普通用户采取行动

公共职能__construct() {

$this->middleware('auth');
$this->middleware('agent');

}