【发布时间】:2021-10-24 09:52:47
【问题描述】:
嘿,我正在开发一个项目,我在其中拥有用户角色和权限,我试图通过定义 Gates 在中间件的帮助下保护我的路线,但它向我展示了 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;
}
});
【问题讨论】:
-
您的意思是返回
adminRolesCount == 1?编辑:等等 - 你为什么还要设置 $adminRolescount?为什么要返回计数?我很困惑:D -
@Frank 不,它没有像我预期的那样工作,所以我用
adminRolesCount == 1进行了测试,它也不起作用 -
@Frank 有两种类型的管理员
Superadmin和Subadmin对于超级管理员我想给他们所有访问权限,但对于子管理员他们需要通过门中定义的逻辑。跨度> -
AdminsRole $adminsroles 是如何传递给 gates 函数的?甚至进入添加类别?我没有看到它在路线中定义。另外 - 确保返回布尔值,而不是计数,只检查是否存在或最后为非超级管理员返回 $adminRolescount > 0 并为超级管理员返回 true。我不太喜欢盖茨,所以其他人可能会在这里提供更好的帮助
-
@Frank 好的,谢谢
标签: php laravel permissions roles