Zend framework 利用父/子关系构建Zend_Acl和CRUD

Zend framework 利用父/子关系构建Zend_Acl和CRUD,zend-framework,acl,zend-acl,Zend Framework,Acl,Zend Acl,我想知道我应该如何利用父/子关系为CRUD构建ACL 这些项目都是针对政客的。托德利斯特有托德 项目有各种控制器操作 /项目/添加 /项目/编辑/{projId} /projects/delete/{projId} /待办事项列表/add/{projId} /待办事项列表/编辑/{todoListId} 正如您在层次结构中看到的,某些操作的ID不是指向它们自己(例如,todo lists controller->todo list resource),而是指向它们的父操作 所以我有了设置(

我想知道我应该如何利用父/子关系为CRUD构建ACL

这些项目都是针对政客的。托德利斯特有托德

项目有各种控制器操作

  • /项目/添加
  • /项目/编辑/{projId}
  • /projects/delete/{projId}
  • /待办事项列表/add/{projId}
  • /待办事项列表/编辑/{todoListId}
正如您在层次结构中看到的,某些操作的ID不是指向它们自己(例如,todo lists controller->todo list resource),而是指向它们的父操作

所以我有了设置(一般来说),它看起来是这样的

  • ACL控制器插件(preDispatch)
    • 将角色设置为loggedin user或“unauthenticated”
    • 将资源设置为控制器名称
    • 将权限设置为操作名称
    • 如果设置了请求参数“id”,则获取实现
      Zend\u Acl\u Resource\u接口的实际实体(我使用的是ORM)。这就是问题的症结所在。我通常会从控制器名称中获取资源,但是对于
      /todo lists/add
      ,我必须知道如何获取父实体(项目)。有了这个设置,我将不得不改变特权,以类似“addTodoList”的东西。这样,项目acl断言类将不得不处理这些内容。控制器操作和ACL逻辑之间也将存在断开连接。可以吗
也许我应该在ProjectsController中添加ToDolstation而不是ToDolstController?这将简化我的ACL代码,我不需要检查和修改资源/权限?我可以直接从请求参数(控制器和操作名称)获取这些参数


你是如何设置ACL的

使用Zend_Acl_断言,为projectid和todoId创建断言。在给予许可时

$myAcl->allow($role,'projects','edits',new My_Project_Assertion());
由于大写字母(或定义您自己的调度程序)AddToDoListation wd工作,您不能使用操作“AddToDoListation”