1

我有具有以下关系的模型,定义了用户可以属于多个组的情况,并且可以授予多个组访问项目的权限。

UserHABTM Group_Project

我想进行设置,以便find()在 Project 模型上所做的任何操作都只会返回当前用户有权访问的结果,具体取决于她的组成员身份。

我的第一个想法是使用beforeFind()回调来修改查询。然而,二级协会让我难住了。我通过重新绑定模型解决了类似的问题(请参阅此问题)。但是,这是针对自定义查找方法的——我认为这种方法在我需要修改任意查询的一般情况下不起作用。

使用afterFind()过滤结果不是一个好主意,因为当它没有返回正确数量的记录时,它会混淆分页(例如)。

最后,我有一个挥之不去的怀疑,我正在尝试重新发明轮子。我在 CakePHP 中看到的访问控制(例如 Cake ACLs)一直是在控制器/动作级别而不是在模型/记录级别,但我觉得这应该是一个已解决的问题。

编辑:我最终认为这过于复杂,只是getAccessibleByUser($id)在我的项目模型中添加了一个方法。但是,我仍然很好奇是否可以将这种限制全局添加到所有find()操作中。这似乎正是您想要在 中做的事情beforeFind(),我怀疑(正如 DavidYell 在下面建议的那样)答案可能在于 Containable 行为。

4

1 回答 1

0
于 2013-02-05T09:55:52.720 回答