Zend_Auth或Zend_Acl检查DB记录?

时间:2012-02-09 14:19:10

标签: zend-framework authentication acl

在我的应用程序中,您拥有用户和书籍。用户可以创建,编辑和删除自己的书籍。当用户登录时,他必须首先选择他想要处理的书。该书籍ID存储在会话变量中,因此通过该应用程序可以清楚地了解用户正在处理哪本书。用户还可以与彼此共享书籍,并且所有者(创建该书籍的人)比被邀请为该书贡献的其他用户拥有更多的权限。

首先,我以非常混乱的方式实现它,现在我想这样做:

  • 在引导程序中,加载了控制器插件Auth。
  • 在控制器插件中,我检查用户是否有身份
  • 在控制器init()中,我加载了我的动作助手
  • 在动作帮助程序中,我加载Zend_Acl并检查用户是否具有处理此特定书籍的权限(检查此用户与本书之间是否存在链接)以及是否具有在此处执行这些操作的权限。书(也许他不应该删除它)。

这有意义吗?我应该存储图书ID吗?在Zend_Auth :: getInstance() - > getStorage()?

修改 我在哪里存储用户的角色?还存在Zend_Auth?

1 个答案:

答案 0 :(得分:1)

我认为你的方法是有道理的。我会将图书ID存储在Zend_Session_Namespace中,并将用户存储在Zend_Auth的存储空间中。如果您放入存储的用户是对象/模型,请让它实现Zend_Acl_Role_Interface,以便它包含一个返回用户角色的getRoleId()方法。这样,您可以将用户对象直接传递给任何需要角色的ACL方法,并且可以从对象中获取角色。

如果有意义,您可以拥有一个名为activeBookId的用户对象的属性或类似的属性,并将书籍ID存储在那里,如果它似乎适合用户对象。