我有一个使用Zend \ Authentication的登录系统,工作正常。我将用户身份保存在存储中,因此我也知道登录用户的ID。
使用TableGateway访问数据库表。
我试图找出允许用户仅访问其记录的正确方法(例如,只有他们在customers表中标记有该user_id的客户记录),当然还允许他们仅编辑自己的记录。
是的,我可以读取Table类中的标识并通过user_id过滤记录,或者甚至更好地通过来自Controller的user_id调用数据检索功能,而不是让Table类涉及用户标识。
我感兴趣的是“创建一个只返回已登录用户的已分配数据的模块的正确方法是什么?”。我是ZF2的新手,我不想学习错误的方法,但是已经存在且经过验证的方法,如果有的话。
感谢您的阅读。
答案 0 :(得分:1)
zend身份验证服务仅对您的数据库进行验证登录,但在针对db调用返回的数据时不要在其他控制器中注意。
所以在这种情况下,您有责任注意返回的数据。像这样的东西
$assignedUserdata = $database->findBy(array('id' => $this->identity()->getId()));
答案 1 :(得分:1)
老问题,但无论如何,我会给你,也可能给别人我的解决方案。有同样的问题,我不喜欢开发人员每次访问数据库时都要考虑用户上下文。
我所做的是将我的存储库(=抽象层扩展到数据库查询)扩展为用户感知。所以我的OrderRepository implements UserAwareRepository
。每个UserAwareRepository都希望获得一个在其构造函数中注入的有效用户对象,我使用它来生成工厂。
现在UserAwareRepository所做的是将WHERE user=$user->getId()
附加到每个查询。
不易出错。