【发布时间】:2020-08-08 23:24:42
【问题描述】:
我正在处理 Laravel 中间件的一些问题。我想要完成的是注册用户有 4 个角色。 1. 主管理员 2. 管理员 3. 卖家 4. 客户。我希望我的主管理员、管理员和卖家能够访问我的 CategoryController,而客户无法访问它,但是当我将中间件放入控制器的构造函数中时,它只允许 masteradmin 访问 CategoryController 并返回管理员和卖家用户。请告诉我如何做到这一点。
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/中间件/管理员
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 1)
{
return back();
}
return $next($request);
}
http/中间件/卖家
public function handle($request, Closure $next)
{
if(Auth::user()->user_role != 2)
{
return back();
}
return $next($request);
}
Http/中间件/客户
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');
}
它现在不工作我想让一个或多个用户访问我的整个控制器请提前告诉我如何实现这一点谢谢
【问题讨论】:
-
我不太明白这个问题:
it only checks the first middleware。能详细点吗? -
你好,我的意思是它只让主管理员访问类别控制器......并返回卖家和管理员用户
-
你在下面添加这个
$this->middleware('auth'); -
下面添加auth中间件后还是一样
标签: php laravel user-permissions laravel-middleware laravel-7