在我正在开发的应用程序中,每个用户都可以属于一个或多个组,例如“guest”、“member”、“admin”等。
当用户应用更改模型的操作时,例如注册帐户、编辑某人的帖子等,我需要验证是否允许用户这样做。
操作反过来可以有一个所有者(或主题),该所有者(或主题)被允许执行它。例如,注册和登录操作主题是guest
,注销主题是member
(表示已登录的会员),编辑帖子操作主题是owner
。
现在我按照 Apache 的允许、拒绝规则来做: - 每个方法都有一个允许使用它的用户角色列表 - 每个角色都有 3 个属性:
order
(“允许,拒绝”或“拒绝,允许”)
allow
- 带有主题角色列表(可以与当前用户不同),例如所有者、访客、成员、管理员等,允许使用它
deny
- 与上面相同,但不允许使用它的主题角色
函数isAllowed
有这样的逻辑:
获取当前用户和主题组。
如果当前用户 ID = 主题用户 ID,它会将“所有者”添加到当前用户和主题的组中。
如果方法的用户角色中没有列出当前用户的组,则函数返回 false。
Else 函数继续检查主题组是否在允许或拒绝列表中,并应用顺序(允许/拒绝)逻辑。
如果有超过 1 个结果(例如,主题用户既是成员又是管理员),我应用从属逻辑(其中每个角色都有一个重要的数值,所以我可以知道作为管理员是比作为普通成员更重要的职位)并为最重要的角色选择结果(允许或拒绝)。
这有意义吗?我应该改变什么?