【发布时间】:2018-01-13 06:06:03
【问题描述】:
我在 laravel 中使用中间件。我有两个中间件,一个是管理员,第二个是专员
现在在两个中间件中,一些路由可以访问这两个中间件,而有些则不能。现在发生的事情是我希望在专员中间件中不能访问管理中间件的个人路由。 这里我试过了:-
//Admin Middleware Route
Route::group(["middleware" => ['admin']], function () {
Route::match(['get', 'post'], '/admin/users', 'AdminController@users');
});
//Commissioner Middleware Route
Route::group(["middleware" => ['commissioner']], function () {
//we can put later on these routes
});
// common middleware routes between commissioner and admin
Route::group(["middleware" => ['admin','commissioner']], function () {
Route::match(['get', 'post'], '/admin/dashboard', 'AdminController@dashboard');
Route::match(['get', 'post'], '/admin/profile', 'AdminController@profile');
});
现在,当我通过专员登录时访问 AdminController@users 路由时,它是可访问的,但我希望在专员登录时不访问该路由。但是 AdminController@dashboard 和 AdminController@profile 应该可以在两个中间件中访问
When admin login then type is : master
when commsioner login then type is : commissioner
// Commissioner Middleware
class Commissioner
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(empty(Session::has('adminSession'))){
return redirect()->action('AdminController@login')->with('flash_message_error', 'Please Login');
}
return $next($request);
}
}
// admin Middleware
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(empty(Session::has('adminSession'))){
return redirect()->action('AdminController@login')->with('flash_message_error', 'Please Login');
}
return $next($request);
}
}
请帮助我,我正在使用 laravel 5.2。提前感谢:)
【问题讨论】:
-
为什么你的 Commissioner 中间件检查“Session::has('adminSession')”,是不是错字?应该是“Session::has('commissionerSession')”吗?
-
不,它是 adminsession,因为 commsioner 也保存在 admin 表中并且具有不同的类型
标签: php laravel laravel-5.2 laravel-middleware