Laravel 8 门无法使用 Auth::guard
Laravel 8 gates not working with Auth::guard
嘿,我正在开发一个项目,我在其中拥有用户的角色和权限,我试图通过定义盖茨在中间件的帮助下保护我的路线,但它向我展示 403| Not Authorized
。我不明白实际问题是什么?
进入类别控制器
public function addcategory(AdminsRole $adminsroles){
return view('add-category');
}
进入路线
Route::get('/add-category', [CategoryController::class, 'addcategory'])->middleware('can:add-category')->name('addcategory');
进入AuthServiceProvider.php
$admin = Auth::guard('admin');
Gate::define('add-category', function ($admin, AdminsRole $adminsroles) {
if($admin->user()->u_type != 'superadmin'){
$adminRolescount = $adminsroles::where([
['admin_id', '=', $admin->user()->id],
['module', '=', 'categories'],
['add_access', '=', '1'],
])->count();
return $adminRolescount;
}else{
return $adminRolescount = 1;
}
});
我认为您要查找的内容可以简化。您的控制器和路由文件中的代码不需要调整。但是,我会将您的门定义更改为以下内容:
Gate::define('add-category', function ($user = null) {
// Fetch user from custom guard
$user = Auth::guard('admin')->user();
// Check if a valid user instance was passed
if (is_null($user)) {
return false;
}
// Allow super admins to add categories regardless of AdminsRole existence
if ($user->u_type === 'superadmin') {
return true;
}
// Check if current user has a matching AdminsRole row with add_access permission
return AdminsRole::where([
['admin_id', '=', $user->id],
['module', '=', 'categories'],
['add_access', '=', '1'],
])->exists();
});
请注意,如果有登录用户,门总是接收用户实例作为其第一个参数,您无需自己提供。此外,您可以使用正在检查并自动提供给入口的用户实例的 ID,直接通过模型查询 AdminsRole 是否存在。
嘿,我正在开发一个项目,我在其中拥有用户的角色和权限,我试图通过定义盖茨在中间件的帮助下保护我的路线,但它向我展示 403| Not Authorized
。我不明白实际问题是什么?
进入类别控制器
public function addcategory(AdminsRole $adminsroles){
return view('add-category');
}
进入路线
Route::get('/add-category', [CategoryController::class, 'addcategory'])->middleware('can:add-category')->name('addcategory');
进入AuthServiceProvider.php
$admin = Auth::guard('admin');
Gate::define('add-category', function ($admin, AdminsRole $adminsroles) {
if($admin->user()->u_type != 'superadmin'){
$adminRolescount = $adminsroles::where([
['admin_id', '=', $admin->user()->id],
['module', '=', 'categories'],
['add_access', '=', '1'],
])->count();
return $adminRolescount;
}else{
return $adminRolescount = 1;
}
});
我认为您要查找的内容可以简化。您的控制器和路由文件中的代码不需要调整。但是,我会将您的门定义更改为以下内容:
Gate::define('add-category', function ($user = null) {
// Fetch user from custom guard
$user = Auth::guard('admin')->user();
// Check if a valid user instance was passed
if (is_null($user)) {
return false;
}
// Allow super admins to add categories regardless of AdminsRole existence
if ($user->u_type === 'superadmin') {
return true;
}
// Check if current user has a matching AdminsRole row with add_access permission
return AdminsRole::where([
['admin_id', '=', $user->id],
['module', '=', 'categories'],
['add_access', '=', '1'],
])->exists();
});
请注意,如果有登录用户,门总是接收用户实例作为其第一个参数,您无需自己提供。此外,您可以使用正在检查并自动提供给入口的用户实例的 ID,直接通过模型查询 AdminsRole 是否存在。