请帮我实现PHP Web应用程序的访问控制列表。我特意使用Zend_ACL。
我希望对特定实体(无论是用户还是组)有权访问哪种资源进行细粒度的应用程序控制。我希望能够授予对特定资源实例的访问权限,但也授予该类型的所有资源。例如:
我的问题是:ACL应该引用资源类型还是特定实例?我是否应该使用ACL为用户授予基本的,资源类型范围的特权:
或者我应该为我的不同类型的资源的所有单个实例创建资源,并继续授权以允许所有用户阅读所有资源?看起来比较粗野。
我目前的解决方案是这样的:使用资源继承,创建父类的大多数无资源,每个类型的这个根的子元素,然后为每个实例创建每个类型的子元素。这允许我授予一个特定类型并拒绝几个实例,或者拒绝特定类型但是在一个实例上授予(例如上面的用户#2)。这很好地统一了我的权限系统,但是我的需求更复杂。很快,资源类型将被嵌套。所以我会成为父母或孩子的不同模块。一个例子:一个站点范围的照片库模块,一个公告模块,下面还有另一个更独特的画廊。我不太清楚如何解决这个问题。我仍然希望有能力在所有画廊上授予,或者仅仅为一个画廊,或者只是下面的一些照片。请记住,Zend_ACL不支持资源的多重继承。
实现此目的的最佳方法是什么?所有使用ACL或使用内置于每个模块的逻辑?
答案 0 :(得分:1)
我刚回复SO995925: How should I structure my tree of resources in an ACL?,我对你的建议是完全相同的。
一切都在你的脑海中 - “公告画廊”是“照片画廊”的儿童资源。通用画廊#1父母到“照片画廊”,而“公告画廊”父母到“公告画廊”。如果需要再次拆分树,可以随时在链中添加另一个父资源步骤。
仍然是一个简单的树继承链。
答案 1 :(得分:0)
我认为,您的解决方案计划是大多数系统的工作方式。 Windows文件系统以这种方式工作。我在DCE中使用的第一个ACL系统就是这样工作的。
继承是你必须弄清楚的。您是动态继承还是在创建资源时继承?