表记录访问 - Zend Framework 2

时间:2014-07-23 13:24:55

标签: zend-framework2

我有一个使用Zend \ Authentication的登录系统,工作正常。我将用户身份保存在存储中,因此我也知道登录用户的ID。

使用TableGateway访问数据库表。

我试图找出允许用户仅访问其记录的正确方法(例如,只有他们在customers表中标记有该user_id的客户记录),当然还允许他们仅编辑自己的记录。

是的,我可以读取Table类中的标识并通过user_id过滤记录,或者甚至更好地通过来自Controller的user_id调用数据检索功能,而不是让Table类涉及用户标识。

我感兴趣的是“创建一个只返回已登录用户的已分配数据的模块的正确方法是什么?”。我是ZF2的新手,我不想学习错误的方法,但是已经存在且经过验证的方法,如果有的话。

感谢您的阅读。

2 个答案:

答案 0 :(得分:1)

zend身份验证服务仅对您的数据库进行验证登录,但在针对db调用返回的数据时不要在其他控制器中注意。

所以在这种情况下,您有责任注意返回的数据。像这样的东西

$assignedUserdata = $database->findBy(array('id' => $this->identity()->getId()));

答案 1 :(得分:1)

老问题,但无论如何,我会给你,也可能给别人我的解决方案。有同样的问题,我不喜欢开发人员每次访问数据库时都要考虑用户上下文。

我所做的是将我的存储库(=抽象层扩展到数据库查询)扩展为用户感知。所以我的OrderRepository implements UserAwareRepository。每个UserAwareRepository都希望获得一个在其构造函数中注入的有效用户对象,我使用它来生成工厂。

现在UserAwareRepository所做的是将WHERE user=$user->getId()附加到每个查询。

不易出错。