【发布时间】:2018-01-03 16:14:53
【问题描述】:
我正在使用 Laravel 5.5。
我创建了 4 个中间件,一个按用户角色创建的中间件。
管理员与员工拥有相同的权限。但是,管理员拥有更多权限。
路由文件:
Route::group(['prefix' => 'admin'], function() {
// EMPLOYEE AND ADMIN ROUTES
Route::group(['middleware' => ['admin', 'employe']], function() {
Route::get('showCreationSeance', 'AdministrationController@showCreationSeance');
Route::get('showAjoutCoach', 'AdministrationController@showAjoutCoach');
Route::get('showReservationClient', 'AdministrationController@showReservationClient');
Route::get('showAnnulationClient', 'AdministrationController@showAnnulationClient');
Route::post('creerSeance', 'AdministrationController@creerSeance')->name('admin/creerSeance');
Route::post('ajouterCoach', 'AdministrationController@ajouterCoach')->name('admin/ajouterCoach');
});
// ADMIN ROUTES
Route::group(['middleware' => 'admin'], function() {
Route::get('showCreationActivite', 'AdministrationController@showCreationActivite');
Route::get('showAjoutEmploye', 'AdministrationController@showAjoutEmploye');
Route::post('creerActivite', 'AdministrationController@creerActivite')->name('admin/creerActivite');
Route::post('ajouterEmploye', 'AdministrationController@ajouterEmploye')->name('admin/ajouterEmploye');
});
});
中间件:
class AdminMiddleware
{
public function handle($request, Closure $next)
{
$user = User::getUser(Auth::user()->id_utilisateur);
if(!$user->estAdmin()) {
throw new AuthorizationException();
}
return $next($request);
}
}
class EmployeMiddleware
{
public function handle($request, Closure $next)
{
$user = User::getUser(Auth::user()->id_utilisateur);
if(!$user->estEmploye()) {
throw new AuthorizationException();
}
return $next($request);
}
}
用于中间件的方法:
public function estAdmin() {
$idStatutAdmin = Statut::select('id_statut')
->where('nom_statut', '=', 'ROLE_ADMIN')
->first();
return ($idStatutAdmin->id_statut == $this->id_statut) ? true : false;
}
public function estEmploye() {
$idStatutEmployee = Statut::select('id_statut')
->where('nom_statut', '=', 'ROLE_EMPLOYEE')
->first();
return ($idStatutEmployee->id_statut == $this->id_statut) ? true : false;
}
堆栈跟踪:
Illuminate\Foundation\Exceptions\Handler render
…/app/Exceptions/Handler.php 51
Illuminate\Auth\Access\AuthorizationException
…/app/Http/Middleware/AdminMiddleware.php 25
Illuminate\Foundation\Http\Kernel handle
…/public/index.php 55
问题: 为管理员和员工定义的路由不起作用,我收到一个错误:
Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
没有消息
虽然管理员的路由只能完美运行。你能告诉我这样做是否正确吗?
当我以管理员身份连接时,EmployeMiddleware 会引发错误。当我以员工身份连接时,AdminMiddleware 会引发错误。
感谢您的帮助!
【问题讨论】:
-
您是否尝试缩小引发异常的范围?
-
是的,它在 AdminMiddleware 上。我认为这是因为连接的用户是员工。有可能吗?
-
我不知道,你还没有发布你的中间件的代码。
-
@JimWright 我用中间件代码更新了我的问题。如果您需要更多代码,请告诉我。
-
嗨@N.Lamblin,您能否也发布您的堆栈跟踪以查找错误?这将有助于缩小导致错误的范围。
标签: php laravel laravel-5 middleware