我是使用PHP和MySQL创建Web应用程序的团队的一员.该应用程序将具有多个具有不同角色的用户.该应用程序还将以地理分布的方式使用.因此,我们需要创建一个在以下两个级别运行的访问控制系统:
控制特定php页面的用户权限,即根据用户的角色提供或拒绝对特定页面(或用户界面元素)的访问.例如:可以允许用户访问"学生"页面,但不允许访问"教师"页面.
控制特定数据库记录的用户权限,即修改数据库查询,以便仅显示特定记录.例如,对于城市级别的用户,仅显示与用户的特定城市相关的那些记录,而对于国家级别的用户,应显示该国家中所有城市的记录.
我需要帮助设计一个可以处理这两种访问控制的系统.点号.1似乎很简单.但是,如果不对SQL查询中的信息进行硬编码,我完全不知道如何进行第2点.
任何帮助,将不胜感激.
提前致谢
维纳亚克
几个月前我情况类似.我发现像Zend_ACL这样的工具可以很好地检查单个项目的访问级别(或者相当低的数量).当您需要获取允许用户访问的大量项目时,它会失败.我使用Business Delegate模式为这个问题制作了自定义解决方案.BD提供可在特定上下文中应用的业务逻辑.在这种情况下,SQL逻辑已交付并用作subselect中的过滤条件.请参见下图:
(来源:epsi.pl)
以及说明调用顺序的序列图:
(来源:epsi.pl)
我在博客上写了这个解决方案,遗憾的是它全部都是波兰语,但你可能会发现一些代码和图表.我可以说,实现不是小菜一碟,但在性能方面,与列表中每个元素的迭代访问检查相比,它是一个冠军.此外,上面的基础结构不仅处理列表中的一种类型的项目.只要列表中的项目实现IAuthorizable
接口,它就可以在访问不同列表时使用,可以是城市,国家,产品或文档列表.