我正在开发一个PHP + MySQL社交网络应用程序,现在我需要为全局(所有项目)和/或自我项目(自己创建的项目)设置不同的访问控制(读取,创建,编辑,删除) )为每个模块分组或特定用户。
有没有人有这样做的建议(表格结构等)?
好的,我在这里提供更多细节,目前我有一个tbl_module,tbl_user和tbl_user_role。每个用户和角色可以对特定模块具有不同的访问权限。
并且仅限全球访问或仅限自己(自己创建的帐户或记录)。
和我目前的方法:我创建另一个表来保存访问细节:
acl_read,acl_update,acl_create,acl_delete值范围:
我相信这是解决这个问题的更有效方法,或者可能是我现有方法的改进。
感谢您的回复。
答案 0 :(得分:5)
这是一个非常广泛的问题,所以你很可能只得到非常广泛的答案。
大多数CMS系统都有一个表格,列出了可以在系统上生成的内容类型。
另一个表格描述了每种类型的内容的显示方式(在首页,各个博客页面等)。
另一个表为每个用户提供一个或多个“用户类型”或“组”,例如admin,unregistered,moderator等。
最后一张表是各种各样的访问表 - 它显示了每个组有权做的事情,包括它可以创建,编辑,发布等的内容类型。
我建议您花一点时间研究其他CMS软件的数据库模式,例如Slashcode,Drupal或其他数百万个CMS系统之一。
- 亚当
答案 1 :(得分:1)
这实际上是一个非常广泛的问题。假设您清楚地分离了应用程序层(例如,使用MVC),那么这就是业务层中的那种东西。
根据您的直接要求,它可能相当简单。在您的users表中,有一个hasEdit,hasView等。对于每个项目,将一个userid附加到它代表创建者。在业务层中,规则是如果它们是创建者,则它们具有编辑权限,或者它们具有hasEdit = true。
提升一个档次,如果你有不同的类型,并且hasEdit权限是 per-type ,你需要另一个实体。
<强> userPermission 强>
要确定他们是否有编辑权限,您可以检查他们是否是所有者,或者在userPermission表中查找该项类型和当前用户,并检查hasEdit。您可以制作其他规则,例如在用户表中放置全局hasEdit。或者通过userPermissionId中的条目使用NULL typeId表示全局hasEdit。
使用角色和可变数量的权限可能会变得更加复杂..这一切都归结为您的要求。您需要仔细规定您的业务需求(提出一堆用例),然后您可以从那里进行设计。事实上,我所提出的信息确实不足以提出(甚至这可能不是你所需要的)。
答案 2 :(得分:0)
我喜欢使用一种防火墙规则方法或类似的mysql表规则方法:您可以授予用户或用户组对某些对象或对象组的某些权限。使每个规则成为规则表中的一行。当您需要执行诸如编辑之类的操作时,您可以在规则表上内联接当前用户,当前用户的组,布尔编辑列以及对象ID或对象组。如果您返回任何行,则授予该权限。
答案 3 :(得分:0)
有很多设计安全性的方法,我喜欢不同的情况。有UNIX风格的用户组 - 其他。我碰巧喜欢PmWiki's security model。
我开发了一个使用类似于Apache的用户角色权限结构的网站。通过该网站,我使用了一个模板系统,该系统使用标题包含文件和页脚包含文件来使用“标准内容”包装页面内容。内容受限的页面可以将变量设置为标题脚本查找所需的权限,如果设置,则调用auth函数来检查用户是否属于该权限的角色。
使用用户角色权限模型的好处是,如果您的大多数用户属于整齐的授权类别,则为用户设置授权只需向该用户添加正确的角色即可。权限链接到角色,而不是直接链接到用户,因此您可以轻松调整整个用户类的权限。