【发布时间】:2016-10-17 13:43:02
【问题描述】:
在web.php 中,我有两个用于两个用户角色的中间件组 - admins 和 non_admins:
Route::group(['middleware' => ['auth', 'admin']], function () {
// if user is logged in AND has a role of admin...
Route::get('/', 'Admin\IndexController@index');
});
Route::group(['middleware' => ['auth', 'non_admin']], function () {
// if user is logged in AND has a role of non_admin
Route::get('/', 'NonAdmin\IndexController@index');
});
admin 和non_admin 中间件都检查Auth::user() 的角色分别是admin 或non_admin;如果不是,则中间件以abort(403) 失败。 为什么我没有一个中间件?这样做的目的是将两个角色分开,以便每个角色都有自己独立的控制器逻辑和自己的视图。
问题
如果我以 admin 身份登录,我会得到 403,如果我以 non_admin 身份登录,它会按预期工作。我的猜测:Laravel 看到了两条重复的路由,并且只解析了最后定义的一条(恰好在 ['middleware' => ['auth', 'non_admin']] 中)。
问题
如何解决重复的路由但分离控制器和表示逻辑?同样,admin 和 non_admin 用户将访问 same 路线 ('/') 但看到两个 不同 视图。 我也想在两个不同的控制器中实现这个。
【问题讨论】:
-
你能发布中间件类吗?可能 AdminMiddleware 没有按预期工作。
-
你是怎么解决这个问题的?我也有同样的问题。
-
@Notflip 显然你不能在 Laravel 中有重复的路由,因为它们指向同一个 URL。您可以使用Bouncer 来管理角色。
标签: laravel laravel-5.3