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);
    } 

Authenticate.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');   
}

管理者とは異なるタイプのすべてのユーザーにリダイレクトを行いたいため

そして、その中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 に答える