我在中间件中有两个级别并且它运行不正常,那么如何一次编写两个级别的中间件?
public function __construct()
{
$this->middleware('auth');
$this->middleware('Admin');
$this->middleware('Teacher');
}
我也有这个,我想检查一下这个页面只能由管理员和老师访问,但是在编写代码时它不能正常工作以及如何正确编写它?
@if (Auth::check() && Auth::user()->level == 'Admin')
@elseif (Auth::check() && Auth::user()->level == 'Teacher')
@endif
如果你能帮助我解决这个问题,我将非常感激
答案 0 :(得分:0)
根据我的经验,我使用中间件做到了..
<强>中间件强>
public function handle($request, Closure $next, $roles)
{
$roles = explode('|',$roles);
$user = User::find($request->user()->id);
foreach($user->intRoles as $myRole)
{
if(in_array($myRole->role_id, $roles))
{
return $next($request);
}
}
return redirect()->back();
}
<强>路线强>
Route::group( ['middleware' => 'rolePermissions:1|2|3'], function(){
Route::get('/users',['as'=>'users', 'uses'=>'PagesController@users']);
});
只有角色(身份证)为1,2或3的用户才能访问mydomain.com/users。
答案 1 :(得分:0)
您有2个独立的中间件用于检查用户级别。这会强制条件并且不会按照您想要的方式工作。您需要一个中间件来检查用户级别并将参数传递给它。
假设我们将此中间件命名为for (row = 0; matrix.length > 0 && row < matrix[0].length; ++row)
。
access
在您的控制器中添加此
public function handle($request, Closure $next, $levels)
{
$userLevels = explode(',', $levels);
if (Auth::check() && in_array(Auth::user()->level, $userLevels)) {
return $next($request);
}
return redirect('/home');
}