Php Laravel中间件多角色
我正在讨论Laravel中间件的一些问题。我想完成的是注册用户有4个角色。1.行政硕士2。管理员3。卖方4。顾客我希望我的主管理员、管理员和卖家能够访问我的CategoryController,而客户无法访问它,但当我将中间件放入控制器的构造函数时,它只允许主管理员访问CategoryController并返回管理员和卖家用户。请告诉我怎么做 Kernel.php$RouteMiddle软件:Php Laravel中间件多角色,php,laravel,user-permissions,laravel-middleware,laravel-7,Php,Laravel,User Permissions,Laravel Middleware,Laravel 7,我正在讨论Laravel中间件的一些问题。我想完成的是注册用户有4个角色。1.行政硕士2。管理员3。卖方4。顾客我希望我的主管理员、管理员和卖家能够访问我的CategoryController,而客户无法访问它,但当我将中间件放入控制器的构造函数时,它只允许主管理员访问CategoryController并返回管理员和卖家用户。请告诉我怎么做 Kernel.php$RouteMiddle软件: 'checkrole' => \App\Http\Middleware\CheckRol
'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/中间件/检查角色
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/中间件/卖方
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');
}
它现在不起作用,我想让一个或多个用户访问我的整个控制器,请提前告诉我如何实现这一点,谢谢问题是您的
adminUser
必须通过masterAdminUser
中间件返回()代码>。因此,您的adminUser
将没有机会通过管理中间件访问类别
解决方案是在单个中间件中处理角色管理,例如,CategoryMiddleware
。该中间件将检查角色并返回()代码>仅当不允许时
一个更干净的Laravel解决方案是使用策略,这似乎非常适合您的情况-您可以看看。我真的不理解问题:它只检查第一个中间件
。你能详细说明一下吗?你好,我的意思是它只允许管理员管理员访问类别控制器。。。并返回卖家和管理员用户添加此$this->中间件('auth')
belowStill在添加auth中间件BelowPolicys后仍然如此。对我来说,策略不起作用,但为控制器制作一个单独的中间件确实起到了作用。在这种情况下,将不得不制造太多的中间件,但是仍然做这个工作。您可能会考虑在这种情况下的角色/权限包——这将使您的生活EasiRelayExchange使用“空间许可证包”。你的建议节省了我很多时间