1

Я пытаюсь создать приложение в Laravel 5.1.Laravel 5.1 переназначение типов пользователей промежуточного ПО

В моей таблице пользователей у меня есть 3 типа пользователей, администратор, агент и фермер. В таблице users находится столбец с именем user_type_id, где admin user_type_id=1, агент user_type_id=2 и фермер 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); 
    } 

routes.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'); 
     }); 
    }); 
+0

Подождите, этот 'Authenticate.php' является тем, который поставляется с laravel (' /app/Http/Middleware/Authenticate.php ')? если да, да, он будет вести себя так, поскольку этот контроллер фактически используется для аутентификации. он также реализует «использование Illuminate \ Contracts \ Auth \ Guard», поэтому я могу только предложить вашему администратору иметь другое промежуточное ПО (как и ваш «агент»), используйте «Authenticate.php» в качестве основного промежуточного программного обеспечения. Таким образом, для защиты ваших маршрутов вам нужно было заключить маршрут, по крайней мере, с двумя «Route :: group» - один для аутентификации, другой для сегрегаций/ролей. –

ответ

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)

Смежные вопросы