PHP:如何检查给定组的成员是不是允许更改模型
Posted
技术标签:
【中文标题】PHP:如何检查给定组的成员是不是允许更改模型【英文标题】:PHP: How to check if changing model is allowed to member of a given groupPHP:如何检查给定组的成员是否允许更改模型 【发布时间】:2011-05-29 17:16:43 【问题描述】:在我正在开发的应用程序中,每个用户都可以属于一个或多个组,例如“客人”、“会员”、“管理员”等
当用户应用更改模型的操作时,例如注册帐号,编辑某人的帖子等,我需要验证是否允许用户这样做。
动作又可以有一个所有者(或主体),该所有者(或主体)被允许执行它。例如,注册登录动作主题为guest
,注销主题为member
(表示已登录的会员),编辑帖子动作主题为owner
。
现在我按照 Apache 允许、拒绝规则执行此操作: - 每个方法都有一个允许使用它的用户角色列表 - 每个角色都有 3 个属性:
order
(“允许,拒绝”或“拒绝,允许”)
allow
- 包含主题角色列表(可以与当前用户不同),例如允许使用它的所有者、访客、成员、管理员等
deny
- 同上,但不允许使用的主题角色
函数isAllowed
有这个逻辑:
获取当前用户和主题组。
如果当前用户 ID = 主题用户 ID,则将“所有者”添加到当前用户和主题的组中。
如果方法的用户角色中没有列出当前用户的组,则函数返回 false。
Else 函数继续检查主题组是否在允许或拒绝列表中,并应用顺序(允许/拒绝)逻辑。
如果有超过 1 个结果(例如,主题用户既是成员又是管理员),我会应用从属逻辑(其中每个角色都有一个重要的数值,所以我可以知道,作为管理员是一个比作为一个更重要的职位普通成员)并为最重要的角色选择结果(允许或拒绝)。
这有意义吗?我应该改变什么?
【问题讨论】:
如果你有兴趣,我有一个数据库方案。 还有,有什么具体的环境吗? (框架,..) 我当然有兴趣,但是需要 DB 吗?它不是一个框架,而是一个类似 MVC 的 php 应用程序。 @yoda 如果你能把它贴在这里,我很感兴趣。 @SIFE,@SODA,aeon-dev.org/db.png(无用的东西忽略,有些东西是隐藏的,但方案很好用) 【参考方案1】:我会将用户组加载到他们的会话中。然后当你得到一个需要特定组权限的函数时,对会话变量执行 if 以查看它是否匹配。
见:http://php.net/manual/en/ref.session.php
【讨论】:
以上是关于PHP:如何检查给定组的成员是不是允许更改模型的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 flex 4 spark 数据组的一个成员的 itemRenderer 的状态?