-
04-07-2019 - |
题
我是使用PHP和MySQL创建Web应用程序的团队的一员。该应用程序将具有多个具有不同角色的用户。该应用程序还将以地理分布的方式使用。因此,我们需要创建一个在以下两个级别运行的访问控制系统:
- 控制特定php页面的用户权限,即根据用户的角色提供或拒绝对特定页面(或用户界面元素)的访问。例如:可以允许用户访问“学生”。页面但不是“教师”页面页。
- 控制特定数据库记录的用户权限,即修改数据库查询,以便仅显示特定记录。例如,对于城市级别的用户,只应显示与用户特定城市相关的记录,而对于国家级用户,应显示该国家/地区所有城市的记录。 醇>
我需要帮助设计一个可以处理这两种访问控制的系统。点号。 1似乎很简单。但是,如果不对SQL查询中的信息进行硬编码,我完全不知道如何做第2点。
任何帮助将不胜感激。
提前致谢
维纳亚克
解决方案
(来源: epsi.pl )
说明调用顺序的序列图:
(来源: epsi.pl )
我发表了关于此解决方案的博客,不幸的是它都是波兰语,但你可能会发现一些代码和图表。我可以说,实现不是小菜一碟,但在性能方面,与列表中每个元素的迭代访问检查相比,它是一个冠军。此外,上面的基础结构不仅处理列表中的一种类型的项目。只要列表中的项目实现 IAuthorizable
接口,它就可以在访问不同的列表时使用,可以是城市,国家/地区,产品或文档的列表。
其他提示
在我看来,你需要的是:(我将使用国家/州/城市的例子)
- 所有国家/地区的列表。每个“国家/地区”有个身份证。
- 国家内所有国家的清单。每个州都绑定到coutnry的ID,但也有自己唯一的ID。
- 所有城市的列表。每个城市都是一个州或一个国家,并有一个标志来指示哪个。 醇>
对于城市用户,显然只搜索和显示与城市相关的那些与其ID相匹配的记录。但是,对于州或国家级别,搜索与每个城市相关的所有记录,其ID与该国家(或州或您拥有的)相匹配。
所以基本上,每个子组依赖于它上面的组,虽然我没有记错,但我相信你可以使用子查询来完成这个技巧。
如果您不知道如何操作,我会使用像Zend Framework,CakePHP或Symphony这样的php框架。他们为您完成了繁重的工作,并且已经实施了某种类型的访问控制方案。
我有类似的构建解决方案,到目前为止我已经决定使用规范和角色,所以实际上一个角色会附加一些特权规范。如果他们都满意,则授予权限,否则 - 它将回退到资源默认访问权限。
我正在寻找已经实施解决方案的人,但似乎没有人这样做。让我们希望它不会失败:)