Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php web应用程序中多个用户的访问控制_Php_Mysql_Database - Fatal编程技术网

Php web应用程序中多个用户的访问控制

Php web应用程序中多个用户的访问控制,php,mysql,database,Php,Mysql,Database,我正在开发一个PHP+MySQL社交网络应用程序,现在我需要为每个模块设置不同的访问控制(读取、创建、编辑、删除)(所有项目)和/或自我项目(自己创建的项目),以便对每个模块或特定用户进行分组 是否有人对此有建议(表结构等) 好的,这里我提供更多的细节,目前我有一个tbl_模块,tbl_用户和tbl_用户角色。每个用户和角色可以对特定模块具有不同的访问权限 阅读 更新 创造 删除 通过全局访问或仅限自己(自己的帐户或自己创建的记录)进行划分 我目前的做法是:创建另一个表来保存访问详细信息:

我正在开发一个PHP+MySQL社交网络应用程序,现在我需要为每个模块设置不同的访问控制(读取、创建、编辑、删除)(所有项目)和/或自我项目(自己创建的项目),以便对每个模块或特定用户进行分组

是否有人对此有建议(表结构等)


好的,这里我提供更多的细节,目前我有一个tbl_模块,tbl_用户和tbl_用户角色。每个用户和角色可以对特定模块具有不同的访问权限

  • 阅读
  • 更新
  • 创造
  • 删除
通过全局访问或仅限自己(自己的帐户或自己创建的记录)进行划分

我目前的做法是:创建另一个表来保存访问详细信息:

  • 前交叉韧带
  • 模块id(fk模块uid)
  • 目标id(fk用户uid或角色uid)
  • acl_类型(用于标识目标id引用的用户/角色)
  • acl_读取
  • acl_更新
  • acl_创建
  • acl_删除
acl_读取、acl_更新、acl_创建、acl_删除值范围:

  • 0拒绝
  • 1允许
  • 2参考较低优先级检查(如果用户的值为2,则参考角色)
  • 3仅限自己
我相信有更有效的方法来解决这个问题,或者可以改进我目前的方法


谢谢你的回答。

这是一个相当宽泛的问题,所以你可能只能得到非常宽泛的答案

大多数CMS系统都有一个表,列出了系统上可以生成的内容类型

另一个表描述了每种类型的内容是如何显示的(在头版、单个博客页面等)

另一个表为每个用户提供一个或多个“用户类型”或“组”,如管理员、未注册者、版主等

最后一个表是各种访问表——它显示了每个组有权做什么,包括它可以创建、编辑、发布的内容类型等

我建议您花一点时间研究其他CMS软件的数据库模式,例如,或其他数百万CMS系统之一


-亚当

事实上,这是一个非常广泛的问题。假设您有一个清晰的应用程序层分离(例如,使用MVC),那么这就是业务层的工作

考虑到您的直接需求,它可能相当简单。在您的用户表中,有一个hasEdit、hasView等。对于每个项目,在其上附加一个代表创建者的用户ID。在业务层中,规则是如果他们是创建者,则他们具有编辑权限,或者他们具有hasEdit=true

更进一步,如果您有不同的类型,并且hasEdit权限是针对每个类型的,那么您需要另一个实体

用户权限

  • 用户许可ID
  • 用户ID(FK)
  • 类型ID(FK)
  • hasEdit(布尔值)
  • 哈斯维尤
  • 等等
要确定他们是否有编辑权限,可以检查他们是否是所有者,或者在userPermission表中查找该项目类型和当前用户,然后选中hasEdit。您可以制定其他规则,例如在用户表中放置全局hasEdit。或者通过userPermissionId中的一个条目用空typeId表示全局hasEdit


使用角色和不同数量的权限,这可能会变得更加复杂。。这一切都取决于你的要求。您需要仔细确定您的业务需求(提出一系列用例),然后您可以从中进行设计。实际上,没有足够的信息比我在这里概述的要多(甚至这也可能不是您所需要的)。

我喜欢使用一种防火墙规则方法或类似的mysql表规则方法:您可以授予用户或用户组对某些对象或对象组的某些权限。使每个规则成为规则表中的一行。当需要执行编辑之类的操作时,可以在规则表上为当前用户、当前用户组、布尔编辑列以及对象id或对象组进行内部联接。如果您返回任何行,则会授予权限。

有很多种设计安全性的方法,对于不同的情况,我喜欢很多方法。还有一个UNIX风格的用户组。我碰巧喜欢

我开发了一个网站,它使用类似于的用户角色权限结构。在那个网站上,我使用了一个模板系统,它使用了一个页眉包含文件和一个页脚包含文件,用“标准内容”来包装页面内容。具有受限内容的页面可以将变量设置为所需权限,标头脚本会查找该权限,如果设置了,则会调用验证函数,以检查用户是否属于具有该权限的角色

使用用户角色权限模型的好处是,如果您的大多数用户都属于整洁的授权类别,那么为用户设置授权只需向该用户添加正确的角色即可。权限链接到角色,而不是直接链接到用户,因此您可以轻松地调整整个类用户的权限