Php 如何在laravel中为多种类型的管理员使用中间件?
我在laravel中使用中间件。我有两个中间件,一个是管理员,另一个是专员 现在,在这两个中间件中,有些路由同时访问中间件,有些路由不访问中间件。现在发生的事情是,我不想在commissioner中间件中访问管理中间件的个人路由。 在这里,我试过:-Php 如何在laravel中为多种类型的管理员使用中间件?,php,laravel,laravel-5.2,laravel-middleware,Php,Laravel,Laravel 5.2,Laravel Middleware,我在laravel中使用中间件。我有两个中间件,一个是管理员,另一个是专员 现在,在这两个中间件中,有些路由同时访问中间件,有些路由不访问中间件。现在发生的事情是,我不想在commissioner中间件中访问管理中间件的个人路由。 在这里,我试过:- //Admin Middleware Route Route::group(["middleware" => ['admin']], function () { Route::match(['get', 'post'], '/admi
//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。感谢您的建议:)如果我正确理解您的问题,您有一个管理表,其中包含两种不同类型的管理员:master和commission。 这两种类型的管理员都是通过invoke登录的AdminController@login方法。您希望使用中间件来检查管理员的类型,以保护您的路由 以下是我的建议:
- AdminAuth中间件(在Http/Kernel.php中将其命名为“admin”),用于对master和commission进行身份验证检查
- 主中间件(在Http/Kernel.php中将其命名为“Master”)检查主类型admin
- 专员中间件(在Http/Kernel.php中将其命名为“专员”)检查专员类型admin
class AdminAuth
{
public function handle($request, Closure $next)
{
if(!Session::has('adminSession')){
return redirect()->action('AdminController@login')->with('flash_message_error', 'Please Login');
}
return $next($request);
}
}
class Master
{
public function handle($request, Closure $next)
{
$admin = ... // Your code to retrived authenticated admin instance.
if($admin->type !== 'master') { // I assume you have a type field.
// return error here to indicate user is not a master
}
return $next($request);
}
}
class Commissioner
{
public function handle($request, Closure $next)
{
$admin = ... // Your code to retrived authenticated admin instance.
if($admin->type !== 'commissioner') { // I assume you have a type field.
// return error here to indicate user is not a commissioner
}
return $next($request);
}
}
//Admin Middleware Route can only be accessed by master admin
Route::group(["middleware" => ['admin', 'master']], function () {
Route::match(['get', 'post'], '/admin/users', 'AdminController@users');
});
//Commissioner Middleware Route
Route::group(["middleware" => ['admin', 'commissioner']], function () {
//we can put later on these routes
});
// common middleware routes between commissioner and admin
Route::group(["middleware" => ['admin']], function () {
Route::match(['get', 'post'], '/admin/dashboard', 'AdminController@dashboard');
Route::match(['get', 'post'], '/admin/profile', 'AdminController@profile');
});
顺便说一句,中间产品是“和”关系。假设您在路线中有以下声明:
“中间件”=>[“管理员”、“专员”]
这意味着只有当您通过“管理员”和“专员”检查时,才能访问该路由 如果我正确理解您的问题,您有一个管理表,其中包含两种不同类型的管理员:master和commission。 这两种类型的管理员都是通过invoke登录的AdminController@login方法。您希望使用中间件来检查管理员的类型,以保护您的路由 以下是我的建议:
- AdminAuth中间件(在Http/Kernel.php中将其命名为“admin”),用于对master和commission进行身份验证检查
- 主中间件(在Http/Kernel.php中将其命名为“Master”)检查主类型admin
- 专员中间件(在Http/Kernel.php中将其命名为“专员”)检查专员类型admin
class AdminAuth
{
public function handle($request, Closure $next)
{
if(!Session::has('adminSession')){
return redirect()->action('AdminController@login')->with('flash_message_error', 'Please Login');
}
return $next($request);
}
}
class Master
{
public function handle($request, Closure $next)
{
$admin = ... // Your code to retrived authenticated admin instance.
if($admin->type !== 'master') { // I assume you have a type field.
// return error here to indicate user is not a master
}
return $next($request);
}
}
class Commissioner
{
public function handle($request, Closure $next)
{
$admin = ... // Your code to retrived authenticated admin instance.
if($admin->type !== 'commissioner') { // I assume you have a type field.
// return error here to indicate user is not a commissioner
}
return $next($request);
}
}
//Admin Middleware Route can only be accessed by master admin
Route::group(["middleware" => ['admin', 'master']], function () {
Route::match(['get', 'post'], '/admin/users', 'AdminController@users');
});
//Commissioner Middleware Route
Route::group(["middleware" => ['admin', 'commissioner']], function () {
//we can put later on these routes
});
// common middleware routes between commissioner and admin
Route::group(["middleware" => ['admin']], function () {
Route::match(['get', 'post'], '/admin/dashboard', 'AdminController@dashboard');
Route::match(['get', 'post'], '/admin/profile', 'AdminController@profile');
});
顺便说一句,中间产品是“和”关系。假设您在路线中有以下声明:
“中间件”=>[“管理员”、“专员”]
这意味着只有当您通过“管理员”和“专员”检查时,才能访问该路由 为什么您的专员会检查“Session::has('adminSession')”,这是一个打字错误吗?是否应该是“Session::has('commissionerSession')”?不,它是adminsession,因为Commissioner也保存在admin表中,并且具有不同的类型为什么您的专员中间件检查“Session::has('adminsession')”,这是一个打字错误吗?应该是“Session::has('commissionerSession')”?不,它是adminsession,因为Commissioner也保存在admin表中,并且具有不同的类型谢谢您的努力。这对你的努力很有帮助。这对我有帮助