有没有一种方法可以为Laravel中的Nova资源明确定义策略?

时间:2020-08-05 13:24:25

标签: laravel laravel-nova

该方案是我希望能够独立于其他用户来管理人员用户类型。只有员工才能看到员工资源并与之交互,其他任何用户类型都不能访问它。

因此,我拥有App\Nova\UserApp\Nova\Staff资源,并且它们都具有指向$model模型的App\Models\User属性。这很棒,可以完成我需要做的所有事情。

我现在遇到的问题是权限问题。我也在某些地方使用Laravel的策略,并且在这里也想这样做,但是我不知道如何为Staff资源专门制定策略,因为它引用了User模型? 我基本上不希望非职员用户能够在Staff上查看任何内容或执行任何CRUD操作。我相信我可以在侧边栏中隐藏人员,但我的理解是用户仍然可以使用URL对其进行访问。

我知道我可以创建一个扩展用户模型的Staff模型,然后我的Nova资源可以指向该新的Staff模型,但是我对此有问题,因为这是我最初在使用{{ 1}}中的用户角色/权限。

我也想为其创建资源的其他一些用户类型,以便即使它们都在同一用户表中,也可以对其进行独立管理。最后,我将看到职员是一种超级管理员,而另一种用户类型的客户管理员可以看到其客户中的所有用户,因此他们可能会看到“员工”资源,像上面一样,只有客户管理员才应该能够看到,并且肯定只能看到其中的自己的员工。

这是我第一次使用Nova,因此非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

@Nathan,您可以使用特定的身份验证卫士来验证不同的模型。

之后,您可以在策略中为用户编写不同的逻辑。

/**
 * Determine whether the user can update the model.
 *
 * @param Model $user
 * @param \App\Document $document
 * @return mixed
 */
public function update(Model $user, Document $document)
{
    return $user instanceof User ? true : false;
}

答案 1 :(得分:0)

根据nova文档,您只能将策略应用于模型,并且当每个资源都指向其自己的模型时,它可以完美地发挥作用。

但是,在您的情况下,App \ Nova \ User和App \ Nova \ Staff资源都具有指向App \ Models \ User模型的$ model属性。

因此,这是解决方案,您可以做的是为App \ Nova \ Staff创建一个单独的模型,即App \ Models \ Staff,并扩展App \ Nova \ User模型。

class Staff extends User{ }

现在,App \ Nova \ Staff资源应指向App \ Models \ Stuff模型。

这时,如果将策略应用于App \ Models \ Staff,它将起作用。

相关问题