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

Php 如何通过多个用户来保护控制器?,php,laravel-5.4,guard,laravel-middleware,Php,Laravel 5.4,Guard,Laravel Middleware,这是项目要求。我有多个登录,但一些用户无法访问几个模块。像超级管理员和分析师一样,他们可以访问所有模块,但开发人员只能使用自己的控制器 因此,在这种情况下,我如何保护具有多个登录名的控制器。还要注意,我在数据库中有单独的登录页面和表 例如,phonebookController可以由超级管理员和分析师访问,但不能由开发人员访问。 那么请告诉我如何实现这一点 我用这个:: if( Auth::guard('superAdmin')->check() ) { $author =Auth:

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

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

例如,phonebookController可以由超级管理员和分析师访问,但不能由开发人员访问。 那么请告诉我如何实现这一点

我用这个::

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    }

我想在类的构造函数方法中使用它,这是我对管理员和用户(在我的例子中是代理)访问控制的实现 我的用户表中有一个
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');

}
'admin' => 'App\Http\Middleware\Admin',
'agent' => 'App\Http\Middleware\Agent',
在此之后,向laravel注册中间件以执行此操作,并将其添加到位于
app\Http\Kernel.php的Kernel.php中的
protected$routeMiddleware

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

    if ( Auth::check() && !Auth::user()->isAdmin() )
    {
        return $next($request);
    }

    return redirect('/home');

}
'admin' => 'App\Http\Middleware\Admin',
'agent' => 'App\Http\Middleware\Agent',
确保为重定向创建正确的路由,正如我们在中间件文件中提到的那样。 在这之后,你几乎完成了。现在要验证用户是管理员还是普通用户,请将其添加到控制器的构造函数方法中

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

    public function __construct()
{   

    $this->middleware('auth');
    $this->middleware('admin');
}
仅允许普通用户执行操作

公共函数构造() {


}

将每次对控制器的访问记录到数据库中,并在每次加载控制器之前检查用户是否可以查看throw 403…您如何分配角色?用户表中是否有一个字段说明用户是否为管理员?public$user\u type、$participant\u id、$model\u class、$model\u type;公共函数{uu construct(){$this->中间件(函数($request,$next){if(Auth::guard('analysts')->check()='analysts'){$this->participant\u id=Auth::guard('analysts')->user()->id;$this->user_type='analyst';$this->model_type='analyst';$this->model_class='App\Analysts'}else{return redirect()->back();}return$next($request);}}$model=$this->model_class$items=$model::where('id',$this->participant_id)->get()->first();很高兴知道你解决了它!。顺便说一下,您也可以在注释部分使用标记,例如格式化代码,将它们括在
反引号中。