我是使用 PHP 和 MySQL 创建 Web 应用程序的团队的一员。该应用程序将有多个具有不同角色的用户。该应用程序还将以地理分布的方式使用。因此,我们需要创建一个在以下两个级别运行的访问控制系统:
- 控制特定 php 页面的用户权限,即根据用户的角色提供或拒绝对特定页面(或用户界面元素)的访问。例如:用户可能被允许访问“学生”页面,但不允许访问“教师”页面。
- 控制特定数据库记录的用户权限,即修改数据库查询以便仅显示特定记录。例如,对于城市级别的用户,仅应显示与用户的特定城市相关的那些记录,而对于国家级别的用户,应显示该国家/地区所有城市的记录。
我需要帮助设计一个可以处理这两种类型的访问控制的系统。点号。 1 看起来很简单。然而,我完全不知道如何在不硬编码 SQL 查询中的信息的情况下执行第 2 点。
任何帮助,将不胜感激。
提前致谢
Vinayak
几个月前我也遇到过类似的情况。我发现,如果您只检查单个项目(或数量相当少的项目)的访问级别,像 Zend_ACL 这样的工具就可以很好地工作。当您需要获取允许用户访问的大量项目列表时,它会失败。我使用以下方法精心设计了这个问题的自定义解决方案业务代表图案。 BD 提供可应用于特定上下文的业务逻辑。本场景下发了一条SQL逻辑,作为子查询的过滤条件。参见下图:
(source: epsi.pl)
以及说明调用顺序的序列图:
(source: epsi.pl)
我在博客上介绍了这个解决方案,不幸的是,这一切都是波兰语,但您可能会发现方便的代码和图表。我可以说,实现并不是小菜一碟,但在性能方面,与列表中每个元素的迭代访问检查相比,它是冠军。此外,上述基础设施不仅处理列表中的一种类型的项目。它可以在访问不同的列表时提供服务,无论是城市列表、国家列表、产品列表还是文档列表,只要列表中的项目实现IAuthorizable
界面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)