我有用户表。这些users表具有company_id属性。
我有一些带有ID的通用页面,例如
https://www.test.com/customer_question/p/4701/c/40960
仅当登录用户具有特定的company_id时,才需要访问此URL。否则,其他人只需通过递增IDS即可访问链接
因此,在每个控制器(索引,存储,更新等)中,我必须检查这样的东西
$company_id = Auth::user()->company_id;
$verify_seller = DB::table('sellers')
->select('*')
->where('company_id', '=', $company_id)
->get();
if ($verify_seller->isEmpty())
return "This product neither belongs to your seller account nor another seller's product";
我认为我可以通过将上面的代码放到每个客户的_construct函数来处理这个问题。
使用Laravel处理这种情况的最佳方法是什么?
Laravel 5.6版
答案 0 :(得分:2)
双向。
中间件
class CheckSeller
{
public function handle($request, Closure $next, $guard = null)
{
$company_id = Auth::user()->company_id;
$verify_seller = DB::table('sellers')
->select('*')
->where('company_id', '=', $company_id)
->get();
if ($verify_seller->isEmpty()) {
return redirect()->route('main')->withError('Not Allowed')
}
return $next($request);
}
}
在Kernel.php中
protected $routeMiddleware = [
....
'check_seller' => \Illuminate\Auth\Middleware\CheckSeller::class,
]
路线
Route::middleware(['check_seller'])->group(function () {
//any controller that need to use the check_seller middleware
});
或者如果您需要在每个控制器中执行,您可以这样做..
class Example extends Controller {
public function __construct()
{
$this->middleware('check_seller');
}
}
2.基础控制器
class BaseController extends Controller {
public function __construct()
{
$company_id = Auth::user()->company_id;
$verify_seller = DB::table('sellers')
->select('*')
->where('company_id', '=', $company_id)
->get();
if ($verify_seller->isEmpty()) {
return redirect()->route('main')->withError('Not Allowed')
}
}
}
在子控制器中
class SellerController extends BaseController {
public function __construct()
{
parent::__construct();
}
}