【发布时间】:2022-01-22 02:34:12
【问题描述】:
我目前有一个资源表:
- 资源表有以下列:id - title- description - path
还有一个 resource_user_role_restrictions 表
- resource_user_role_restrictionstable 包含以下列:id - resource_id - role_id - viewable
我的模型包含以下函数,该函数检查 resource_user_role_restrictions 表并返回其 resource_user_role_restrictions.role_id 与传入的 $userRoleId 匹配的所有资源,如果它的可见列设置为 1:
public function scopeResourcesFilter($query, array $filters) {
$userRoleId = $filters[0];
$query->whereHas('resourceUserRoleRestrictions', function ($query) use($userRoleId){
$query->where('viewable', 1)->where("role_id", $userRoleId );
});
}
这个函数在我的控制器中被调用:
$userRoleId = Auth::user()->role_id;
$resources = Resource::resourcesFilter([$userRoleId])->with('country', 'resourceUserRoleRestrictions')->get();
但是,现在需要将其转换为黑名单,从而删除可查看的列,并假定表上的任何资源都受到限制且不可见,因此不会返回。我不知道如何让它醒来。理想情况下,这个函数现在应该返回资源表中的所有项目,除了那些 resource_user_role_restrictions.user_role 与传入的 $userRoleId 匹配的项目。
任何帮助都将不胜感激。
【问题讨论】:
标签: laravel eloquent laravel-7