我正在尝试确定用户是否能够更新全局范围内的模型,但我使用的是通常通过关系获得的权限前缀。
申请代码如下:
public function apply(Builder $builder, Model $model)
{
$user = getUser();
if ($user === null || $user->cannot('update', $model)) {
$builder->where('active', '=', 1);
}
}
当我dd($model)
模型实际上没有实例化时,所以当我执行更新权限时,请检查我的策略:
public function update(User $user, Item $item)
{
return $user->hasAnyPermission(['edit-things', $this->prefix($item) . "-edit-item"]);
}
前缀函数如下所示:
private function prefix(Item $item = null)
{
if ($item !== null) {
return $item->parentRelation->roles_permission_prefix;
}
$parentRelation= ParentRelation::findOrFail(request('parent_relation_id'));
return $parentRelation->roles_permission_prefix;
}
由于他们没有成为一种关系,所有这一切都失败了。有什么想法吗?
快速编辑:如果相关,我正在使用Spatie Permissions库。
答案 0 :(得分:0)
唯一能够打破缺失关系的函数是prefix()
函数。
您可以通过检查条件列表中的prefix()
和$model
是否也为空来阻止调用$model->parentRelation
:
public function apply(Builder $builder, Model $model)
{
$user = getUser();
if ( $user === null
|| $model === null
|| (method_exists($model, 'parent_relation') && !$model->parentRelation)
|| $user->cannot('update', $model)
) {
$builder->where('active', '=', 1);
}
}