2012-02-09 80 views
0

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

首先,我实现了它在一个相当混乱的方式,现在我想这样做是这样的:

  • 在引导,控制器插件验证加载。
  • 在控制器插件我检查,如果用户有一个标识
  • 在控制器的init()我打开我的动作助手
  • 在动作助手我加载Zend_Acl中,并检查用户是否拥有特权时上下工夫这本特定的书(检查这个用户和本书之间是否存在链接)以及他是否有权在书上执行这些操作(也许他不应该删除它)。

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

编辑: 我在哪里存储用户的角色?也在Zend_Auth的存储中?

回答

1

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

如果有意义的话,你可以拥有一个名为activeBookId的用户对象的属性或类似的东西,并将书ID存储在那里,如果它看起来适合用户对象。

+0

谢谢!不幸的是,我的模型都是关联数组而不是对象(在项目开始时糟糕的设计决策),所以实现Zend_Acl_Role_Interface将不起作用。但是,我将把这本书存储在Zend_Session_Namespace中,然后:) – Thomas 2012-02-10 12:02:31

相关问题