Я пытаюсь сделать приложение в 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');
});
});
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