在我正在处理的应用中,每个用户都可以属于一个或多个组,例如'客人','会员','管理员'等。
当用户应用更改模型的操作时,例如注册帐户,编辑某人的帖子等,我需要验证是否允许用户这样做。
反过来,操作可以让拥有者(或主体)被允许执行它。例如,注册和登录操作主题为guest
,注销主题为member
(表示已登录成员),编辑帖子操作主题为owner
。
现在我做了一个Apache允许,拒绝规则: - 每个方法都有一个允许使用它的用户角色列表 - 这些角色中的每一个都有3个属性:
order
(“允许,拒绝”或“拒绝,允许”)
allow
- 包含主题的角色列表(可以与当前用户不同),例如允许使用它的所有者,访客,成员,管理员等
deny
- 与上述相同,但主题角色不允许使用
函数isAllowed
具有以下逻辑:
获取当前用户和主题的组。
如果当前用户ID =主题用户ID,则会将“所有者”添加到当前用户和主题的组中。
如果方法的用户角色中没有列出当前用户的组,则函数返回false。
其他功能继续检查主题组是否在允许或拒绝列表中并应用顺序(允许/拒绝)逻辑。
如果有超过1个结果(例如主题用户同时是成员和管理员),我应用从属逻辑(其中每个角色都有一个重要的数值,所以我可以知道管理员是一个更重要的位置,是一个常规成员)并选择结果(允许或拒绝)作为最重要的角色。
这有意义吗?我应该改变什么?
答案 0 :(得分:0)
我会将用户组加载到他们的会话中。然后,当您到达需要特定组权限的函数时,在会话变量上执行if以查看它是否匹配。