2

在我正在开发的应用程序中,每个用户都可以属于一个或多个组,例如“guest”、“member”、“admin”等。

当用户应用更改模型的操作时,例如注册帐户、编辑某人的帖子等,我需要验证是否允许用户这样做。

操作反过来可以有一个所有者(或主题),该所有者(或主题)被允许执行它。例如,注册和登录操作主题是guest,注销主题是member(表示已登录的会员),编辑帖子操作主题是owner

现在我按照 Apache 的允许、拒绝规则来做: - 每个方法都有一个允许使用它的用户角色列表 - 每个角色都有 3 个属性:

order(“允许,拒绝”或“拒绝,允许”)

allow- 带有主题角色列表(可以与当前用户不同),例如所有者、访客、成员、管理员等,允许使用它

deny- 与上面相同,但不允许使用它的主题角色

函数isAllowed有这样的逻辑:

获取当前用户和主题组。

如果当前用户 ID = 主题用户 ID,它会将“所有者”添加到当前用户和主题的组中。

如果方法的用户角色中没有列出当前用户的组,则函数返回 false。

Else 函数继续检查主题组是否在允许或拒绝列表中,并应用顺序(允许/拒绝)逻辑。

如果有超过 1 个结果(例如,主题用户既是成员又是管理员),我应用从属逻辑(其中每个角色都有一个重要的数值,所以我可以知道作为管理员是比作为普通成员更重要的职位)并为最重要的角色选择结果(允许或拒绝)。

这有意义吗?我应该改变什么?

4

1 回答 1

0

我会将用户组加载到他们的会话中。然后,当您到达需要特定组权限的函数时,对会话变量执行 if 以查看它是否匹配。

见: http: //php.net/manual/en/ref.session.php

于 2011-03-29T21:35:55.760 回答