gpt4 book ai didi

zend-framework - 使用父/子关系构建 Zend_Acl 和 CRUD

转载 作者:行者123 更新时间:2023-12-04 04:25:54 26 4
gpt4 key购买 nike

我想知道我应该如何为具有父/子关系的 CRUD 构造我的 ACL。

例如。项目有待办事项列表。 TodoLists 有待办事项

项目有各种 Controller Action

  • /项目/添加
  • /projects/edit/{projId}
  • /projects/delete/{projId}
  • /todo-lists/add/{projId}
  • /todo-lists/edit/{todoListId}
  • ...

正如您在层次结构中看到的那样,一些操作的 ID 不指向它们自身(例如,todo-lists Controller -> todo-list 资源)而是指向它们的父级

所以有了我的设置(通常),它看起来像这样

  • ACL Controller 插件(预调度)
    • 将角色设置为登录用户或“未验证”
    • 将资源设置为 Controller 名称
    • 将权限设置为操作名称
    • 如果设置了请求参数“id”,获取实现Zend_Acl_Resource_Interface 的实际实体(我正在使用 Doctrine ORM)。这就是并发症出现的地方。我通常会从 Controller 名称中获取资源,但例如。使用 /todo-lists/add 我必须知道获取父实体(项目)。使用此设置,我将不得不将特权更改为“addTodoList”之类的东西。这样,项目acl 断言类就会有TodoLists 的东东了。 Controller Actions 和 ACL Logic 之间也将断开连接。可以吗?

也许我应该在 ProjectsController 中添加 TodoListAction 而不是 TodoListsController?这将简化我的 ACL 代码,我不需要检查和修改资源/权限?我可以直接从请求参数( Controller 和 Action 名称)中获取这些。

如何设置这样的 ACL?

最佳答案

使用 Zend_Acl_Assertion ,为 projectid 和 todoId 创建断言。在给予许可的时候做

$myAcl->allow($role,'projects','edits',new My_Project_Assertion());

并且您不能使用操作“addTodoListAction”,因为大写字母(或定义您自己的调度程序)addtodolistAction wd 工作;

关于zend-framework - 使用父/子关系构建 Zend_Acl 和 CRUD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4791721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com