PHP:访问控制机制的体系结构

时间:2010-11-11 11:36:50

标签: php authorization

我有一个PHP应用程序,它具有基于单个页面的navigation-id的访问控制机制。因此,例如,用户可以访问页面1,4,5。导航ID不是静态的,管理员用户可以生成新页面(因此新的导航ID)。我有一些面向服务的架构。所以我有从JSON客户端调用的服务,也可以直接从服务器端调用PHP类(控制器)。我遇到的问题是,我需要一个服务的访问控制机制。我想将它与服务本身分开。

服务正在返回业务对象。所有这些BO都与对象有一些“连接”,该对象具有导航ID。例如service返回图像:Image.page - > Page.navID或服务返回维度(n-n):维度 - > DimImageConnector - > Image.page - > Page.navID。

我无法想象一个干净的解决方案来检查访问权限。要在业务对象中搜索导航ID,似乎不是一个非常好的简单解决方案。

为我的访问控制架构提供一些输入会很好。

谢谢!

BTW:我正在使用注释框架,因此有一种可能性就是通过服务方法指定一些访问信息。

2 个答案:

答案 0 :(得分:1)

我的想法实施起来有点复杂,但我认为它解决了这个问题。它对您的请求有一个问题,那就是服务本身没有分离。

想象一下这个想法。如果当前用户可以调用该服务,则您有一个基本服务类,其中返回方法IsCallable。

从您继承的服务类,NonAuthenticatedService和AuthenticatedService。完成后,您只需要创建一个服务工厂来检索服务并调用它们。

在这里,我留下了一个关于我的强硬的图形概念。对不起图形,它只是Power Point,因为我不是CASE Tools的粉丝。 :)

Sample Hierarchy

希望我能帮忙!

答案 1 :(得分:0)

如果导航ID发生更改且权限基于nav-id,那么只要他们发生变化,您就必须重新映射所有导航ID。

最简单的方法可能是拥有一个将用户与页面匹配的表(而不是nav-id)。您可以修改所拥有的内容或创建新表。然后有另一个表将页面映射到他们当前的nav-id。要检查用户是否具有访问权限,请加入这两个表。

然后,只要nav-id发生变化,您需要做的就是更新映射表。

我建议调查nav-id不会改变的方法。或者,添加要与nav-id一起使用的静态ID。这样你就可以引用静态id并让nav-id随意改变。