1

我正在尝试在 Laravel 5.1 中制作一个应用程序。

在我的用户表中,我有 3 种类型的用户,管理员、代理和农民。在 users 表中有一个名为 user_type_id 的列,其中 admin 是user_type_id=1,agent 是user_type_id=2,farmer 是user_type_id=3

管理员有权执行代理几乎没有权限的所有操作。

问题是在使用中间件时,我的 Authenticate.php 和 AgentAuthenticate.php 中间件文件表现得好像它们是相同的,这意味着代理正在获得管理员的所有权力。有什么逻辑错误吗?这是代码。

agentAuthenticate.php(中间件)

 public function handle($request, Closure $next)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('auth/login');
            }
        }
        if(! $this->auth->user()->user_type != 2) {
         return redirect()->guest('auth/login');   
        }
        return $next($request);
    } 

验证.php

public function handle($request, Closure $next)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('auth/login');
            }
        }
        if(! $this->auth->user()->user_type != 1) {
         return redirect()->guest('auth/login');   
        }
        return $next($request);
    }

路由.php

 //guest routes
    Route::resource('/farmerPoint','farmerPointController',['only' => ['index', 'show']]);
    Route::resource('/crop','cropController',['only' => ['index', 'show']]);

    //Admin routes
    Route::group(['middleware' => 'auth'], function () {
    Route::resource('agent','agentController');
    Route::resource('farmer','farmerController');
    Route::resource('farmer.crop','farmerCropController');
    Route::resource('cropType','cropTypeController');
    Route::resource('crop','cropController',['except' => ['index','show']]);
    Route::resource('farmerPoint','farmerPointController',['except' => ['index','show']]);
    Route::get('/AdminPanel',function(){
       return view('frontend.AdminPanel');
      });
    });
    //agent routes
       Route::group(['middleware' => 'agent'], function () {
       Route::resource('farmer','farmerController');
       Route::resource('farmer.crop','farmerCropController');
       Route::resource('agent','agentController',['only' => ['index','show']]);
       Route::get('/AgentPanel',function(){
        return view('frontend.AgentPanel'); 
       });
    });
4

1 回答 1

0

其中Authenticate.php应该是:

if($this->auth->user()->user_type != 1) {
   return redirect()->guest('auth/login');   
}

因为您想为所有类型不同于 admin 的用户进行重定向

agentAuthenticate.php它应该是:

if(!in_array($this->auth->user()->user_type, [1,2])) {
   return redirect()->guest('auth/login');   
}

因为您想为所有类型与代理不同的用户进行重定向,但如果用户是管理员,您也不想进行重定向(您提到过Admin has permission to do everything

于 2015-12-06T08:46:23.610 回答