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 的状态?

检查用户是否是SharePoint组的成员

查找 Active Directory 组的其他成员?

如何在django中将QuerySet过滤到每个组的最大成员?

通过 C# 确定本地组的成员

给定一个外壳扩展 CLSID,您如何找到实现 COM 可执行文件或 DLL,并检查其接口和成员?