Laravel 中间件多重角色
Laravel middleware multiple roles
我遇到了 Laravel 中间件的一些问题。我想要完成的是注册用户有 4 个角色。 1. Master Admin 2. Admin 3. Seller 4. Customer.我希望我的 Master Admin、Admin 和 Seller 能够访问我的 CategoryController,而客户无法访问它,但是当我将中间件放入我的控制器的构造函数中时,它只允许 masteradmin 访问 CategoryController 和 returns back admin 和 seller 用户.请告诉我如何做到这一点。
Kernel.php $routemiddleware :
'checkrole' => \App\Http\Middleware\CheckRole::class,
'admincheck' => \App\Http\Middleware\Admin::class,
'sellercheck' => \App\Http\Middleware\Seller::class,
'customercheck' => \App\Http\Middleware\Customer::class,
'masteradmin' => \App\Http\Middleware\MasterAdmin::class,
http/Middleware/CheckRole
public function handle($request, Closure $next)
{
if(Auth::user()->user_role == 1)
{
return redirect('admin');
}
elseif(Auth::user()->user_role == 2)
{
return redirect('seller');
}
elseif(Auth::user()->user_role == 3)
{
return redirect('customer');
}
return $next($request);
}
http/Middleware/MasterAdmin
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 0)
{
return back();
}
return $next($request);
}
http/Middleware/Admin
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 1)
{
return back();
}
return $next($request);
}
http/Middleware/Seller
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 2)
{
return back();
}
return $next($request);
}
Http/Middleware/Customer
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 3)
{
return back();
}
return $next($request);
}
类别控制器:
class CategoryController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('verified');
$this->middleware('masteradmin');
$this->middleware('admincheck');
$this->middleware('sellercheck');
// $this->authorizeResource(Category::class, 'category');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('category.index');
}
家庭控制器
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('verified');
$this->middleware('checkrole');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
它现在不工作我想让一个或多个用户访问我的整个控制器请告诉我如何实现这一点提前谢谢
问题是您的 adminUser
必须通过 return back();
的 masterAdminUser
中间件。因此,您的 adminUser
将没有机会通过管理中间件,也无法访问类别。
一个解决方案是在单个中间件中处理您的角色管理,例如 CategoryMiddleware
。此中间件将检查角色和 return back();
仅当不允许
更简洁的 Laravel 解决方案是使用策略,这似乎非常适合您的情况 - 您可以查看 documentation.
我遇到了 Laravel 中间件的一些问题。我想要完成的是注册用户有 4 个角色。 1. Master Admin 2. Admin 3. Seller 4. Customer.我希望我的 Master Admin、Admin 和 Seller 能够访问我的 CategoryController,而客户无法访问它,但是当我将中间件放入我的控制器的构造函数中时,它只允许 masteradmin 访问 CategoryController 和 returns back admin 和 seller 用户.请告诉我如何做到这一点。
Kernel.php $routemiddleware :
'checkrole' => \App\Http\Middleware\CheckRole::class,
'admincheck' => \App\Http\Middleware\Admin::class,
'sellercheck' => \App\Http\Middleware\Seller::class,
'customercheck' => \App\Http\Middleware\Customer::class,
'masteradmin' => \App\Http\Middleware\MasterAdmin::class,
http/Middleware/CheckRole
public function handle($request, Closure $next)
{
if(Auth::user()->user_role == 1)
{
return redirect('admin');
}
elseif(Auth::user()->user_role == 2)
{
return redirect('seller');
}
elseif(Auth::user()->user_role == 3)
{
return redirect('customer');
}
return $next($request);
}
http/Middleware/MasterAdmin
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 0)
{
return back();
}
return $next($request);
}
http/Middleware/Admin
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 1)
{
return back();
}
return $next($request);
}
http/Middleware/Seller
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 2)
{
return back();
}
return $next($request);
}
Http/Middleware/Customer
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 3)
{
return back();
}
return $next($request);
}
类别控制器:
class CategoryController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('verified');
$this->middleware('masteradmin');
$this->middleware('admincheck');
$this->middleware('sellercheck');
// $this->authorizeResource(Category::class, 'category');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('category.index');
}
家庭控制器
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('verified');
$this->middleware('checkrole');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
它现在不工作我想让一个或多个用户访问我的整个控制器请告诉我如何实现这一点提前谢谢
问题是您的 adminUser
必须通过 return back();
的 masterAdminUser
中间件。因此,您的 adminUser
将没有机会通过管理中间件,也无法访问类别。
一个解决方案是在单个中间件中处理您的角色管理,例如 CategoryMiddleware
。此中间件将检查角色和 return back();
仅当不允许
更简洁的 Laravel 解决方案是使用策略,这似乎非常适合您的情况 - 您可以查看 documentation.