Пользователи промежуточного ПО Laravel 5.1 перенаправляют типы

Я пытаюсь сделать приложение в Laravel 5.1.

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

Аутентификация.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'); 
       });
    });

person Noob Coder    schedule 06.12.2015    source источник
comment
подождите, это Authenticate.php поставляется с laravel (/app/Http/Middleware/Authenticate.php)? если это так, то да, он будет вести себя таким образом, поскольку этот контроллер фактически используется для аутентификации. он также реализует use Illuminate\Contracts\Auth\Guard;, поэтому я могу только предложить вашему администратору использовать другое промежуточное программное обеспечение (так же, как ваше agent), использовать Authenticate.php в качестве основного промежуточного программного обеспечения аутентификации. Итак, чтобы защитить свои маршруты, вам нужно было заключить маршрут как минимум в два Route::group - один для аутентификации, другой для сегрегаций/ролей.   -  person Bagus Tesa    schedule 06.12.2015


Ответы (1)


В 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)

person Marcin Nabiałek    schedule 06.12.2015