【发布时间】:2018-07-14 16:18:23
【问题描述】:
期望的结果是,用户可以为公司创建帐户,成为该公司具有超级管理员角色的第一位员工。然后,他可以创建可以访问公司帐户的其他员工帐户。
为此我有两个模型
- 团队(公司帐户)
- 用户(员工帐户)
并且团队和用户之间存在one-to-many 关系。
我为User 模型添加了全局范围,以便自动加载关联的团队,以便在视图中显示必要的信息。
User 模型是可验证的。
用户可以拥有不同的权限。例如,只允许超级管理员从团队中删除其他用户。我正在按照 Laravel 的方式使用自定义请求来验证操作
public function destroy(DeleteTeamUserRequest $request, $id)
{
$this->users->deleteById($id);
return redirect()->route('dashboard')->withFlashSuccess('Deleted User');
}
class DeleteTeamUserRequest extends FormRequest
{
public function authorize()
{
return $this->user()->isSuperAdmin();
}
}
这样我可以确保没有超级管理员角色的用户不会删除其他用户。但是理论上公司 1 的超级管理员可以从公司 2 中删除用户。当然他永远不会在前端有那个 url,但是如果他修改代码,他就有删除所有用户的权限。
我总是可以在控制器中检查给定用户在团队中,但那是错误的。
我将Users 和Teams 都设为可验证(为团队创建另一个网络守卫),在用户登录后手动登录团队(注销时相同),但遇到了同样的问题 - 我必须检查是否我尝试删除的用户与执行该操作的用户在同一个团队中。
{
public function authorize()
{
return $this->user()->isSuperAdmin()
&& $this->team()->has($otherUser); // I dont have other user here
}
}
这种情况应该很常见,但我找不到关于如何正确处理这些情况的很好解释,所以我非常感谢任何建议和帮助。
【问题讨论】: