Php 使用中间件Laravel保护具有角色权限的路由
我有一个多级成员网站,需要在Laravel 5.5的web.php文件中保护我的路由 我的用户表中有一列名为Php 使用中间件Laravel保护具有角色权限的路由,php,laravel,laravel-5,middleware,laravel-middleware,Php,Laravel,Laravel 5,Middleware,Laravel Middleware,我有一个多级成员网站,需要在Laravel 5.5的web.php文件中保护我的路由 我的用户表中有一列名为role\u id 在role\u id中是以下值 NULL(对于新用户) 1(适用于业主) 2(行政) 3(适用于主持人) 4(针对被禁止的用户) 我试图用一个简单的IF语句来实现它 if (Auth::user()->role_id != '2'): return view('home'); else: //ADMIN ROUTES Route::ge
role\u id
在role\u id
中是以下值
- NULL(对于新用户)
- 1(适用于业主)
- 2(行政)
- 3(适用于主持人)
- 4(针对被禁止的用户)
if (Auth::user()->role_id != '2'):
return view('home');
else:
//ADMIN ROUTES
Route::get('/admin','AdminController@index')->name('admin');
endif;
if (Auth::user()->role_id != '1'):
return view('home');
else:
//OWNER ROUTES
Route::get('/admin','OwnerController@index')->name('owner');
endif;
ETC....
但尝试获取非对象的属性时发生get错误。也可能不是最好的方法
所以我读到了关于用中间件这样做的文章:(看起来好多了)
但它没有解释如何添加中间件。
我是否需要为每个组创建5个不同的中间件文件,类似于我找到的文件:
use Illuminate\Contracts\Auth\Guard;
class Admin
{
protected $auth;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if($this->auth->user()->role_id != '2') {
return redirect()->view('home');
}
return $next($request);
}
}
有人能帮忙解释一下如何编写正确的中间件来实现这一点吗?尝试获取非对象属性时出错。如果用户尚未登录,则可以找到 在你检查之前
if(Auth::user()->role\u id!=“2”):
u应确保用户已使用登录
Auth::check()
首先…像这样的例子:
Route::get('/cart/payment', 'CartController@getcartpayment')->middleware('checkAuth');
$user = Sentinel::findById($user_id);
$role= $user->role();
web.php
Route::group(['middleware' => ['auth', 'admin']], function() {
Route::get('/admin/dashboard', function(){
return view('admin.dashboard');
});
});
放入Kernel.php的受保护$routeMiddle软件中
'admin' => \App\Http\Middleware\AdminMiddleware::class,
AdminMiddleware.php
$user = Auth::user();
if($user->role == 'admin'){
return $next($request);
} else
// abort(403, 'Wrong Accept Header');
return new Response(view('notauthorized')->with('role', 'admin'));
}
管理员、版主、所有者、被禁止的用户将是用户表的用户类型/角色列的值。
或者您可以使用user\u type\u id
或role\u id
而不是user\u type\u name
或role\u type
别忘了加上
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
就在下面
use Closure;
你的中间件
您也可以使用其他方法,如Gate,如果需要,请告诉我。:) 确保
Auth::user()
不为null。它为null,并且我以管理员身份登录。这是为什么?尝试获取非对象的属性
意味着您正在尝试执行$foo->bar
但$foo
不是对象。抱歉@echo,我只是浏览了一下您的代码,注意到只有Auth::user()
或$this->Auth->user()
可能返回空值@Scuzzy是对的,也许你可以发布stacktrace,这样我们就可以找到到底是谁在抛出试图获取非对象的属性?
use Closure;