我想知道我应该如何为带有父/子关系的 CRUD 构建我的 ACL。
例如。项目有 TodoLists。TodoLists 有 Todos
项目有各种控制器动作
- /项目/添加
- /projects/edit/{projId}
- /projects/delete/{projId}
- /todo-lists/add/{projId}
- /todo-lists/edit/{todoListId}
- ...
正如你所看到的,在层次结构中,一些动作的 id 不是指向它们自己(例如,todo-lists 控制器 -> 待办列表资源),而是指向它们的父级
所以有了我的设置(通常),它看起来像这样
- ACL 控制器插件(preDispatch)
- 将角色设置为登录用户或“未经身份验证”
- 将资源设置为控制器名称
- 将权限设置为操作名称
- 如果设置了请求参数“id”,则获取实现的实际实体(我正在使用 Doctrine ORM)
Zend_Acl_Resource_Interface
。这就是复杂性出现的地方。我通常会从控制器名称中获取资源,但例如。我必须知道要/todo-lists/add
获取父实体(项目)。使用此设置,我将不得不将权限更改为“addTodoList”之类的东西。这样,项目 acl 断言类就得 TodoLists 东西了。控制器操作和 ACL 逻辑之间也将断开连接。那样行吗?
也许我应该在 ProjectsController 中有 addTodoListAction 而不是 TodoListsController?这将简化我的 ACL 代码,我不需要检查和修改资源/权限?我可以直接从请求参数(控制器和操作名称)中获取这些。
你如何设置这样的 ACL?