gpt4 book ai didi

database-design - CakePHP将记录分配给用户:一种可重用的方法

转载 作者:行者123 更新时间:2023-12-02 04:03:17 27 4
gpt4 key购买 nike

我在尝试提出一个很好的解决方案时遇到了一些困难,该解决方案是将我的应用程序中的任何记录分配给用户或组,然后根据这些分配过滤该模型。

我提出了以下工作分配模型:

Assignment
-id
-assignedto_key
-assignedto_model (either User or Group [hasMany/belongsTo is between User and Group])
-foreign_key
-foreign_model

到现在为止还挺好。现在,我希望能够将我的应用程序中的任何记录分配给整个组或单个用户负载。

例如:
Assignment
-id = 1 (I'm actually using UUIDs)
-assignedto_key = 1
-assignedto_model = User (so this would be assigned to User.id = 1)
-foreign_key = 1
-foreign_model = Painting

Assignment
-id = 2 (I'm actually using UUIDs)
-assignedto_key = 1
-assignedto_model = Group (so this would be assigned to any User with group_id = 1)
-foreign_key = 1
-foreign_model = Painting

Therefore: User 1 can now access the Painting 1. Furthermore, ANY user with group_id = 1 can also access Painting 1.

到现在为止还挺好。我毫不费力地创建了一种逻辑,该逻辑使管理员可以进入记录(例如绘画)并选择应该能够看到此记录的组/用户。

但是,当我想过滤数据时,我迷路了:

基本上,我只需要将记录返回给用户即可访问。

目前,我正在考虑将其视为一种行为,并将其附加到所有“可分配”模型中。
public function beforeFind(Model &$model, $query)
{
// Let's imagine that $model is of type Painting
// I can only think of the following solution:

$Assignment = ClassRegistry::init('Assignment');
$assignedIDs = $Assignment->find('all', array('fields'=> array('id'), 'conditions' => array(
'Assignment.foreign_model' => $model->alias,
'or' => array(
array('Assignment.foreign_model' => 'User', 'Assignment.foreign_key' => AuthComponent::user('id')),
array('Assignment.foreign_model' => 'Group', 'Assignment.foreign_key' => AuthComponent::user('group_id'))
)
)));

$ids = Set::extract('{n}.' . $this->alias . '.id', $assignedIDs);

$query['conditions'][] = array($this->alias . '.id' => $ids);
}

上面的代码将获取当前模型内的所有分配,并且仅在其中进行查询。但这对我来说似乎完全没有效率。

任何人都对我如何实现这种功能有任何指示吗?

提前非常感谢,我期待您的答复。

编辑:作为一个旁注-我不希望在这种情况下正在寻找ACL,因为我只希望返回过滤后的结果-但我很可能会错误地认为ACL在此情况下不是正确的选择案件。

最佳答案

您在这里描述的是“多态关系”。由于关系是在数据中而不是在模式中编码的,因此纯DB'er对此不满意。我们其他人之所以使用'em,是因为它们有效;-)

您是否看到过:http://bakery.cakephp.org/articles/AD7six/2008/03/13/polymorphic-behavior(这是1.3行为,但可移植到2.x)。它处理了处理多态表的很多工作。

关于database-design - CakePHP将记录分配给用户:一种可重用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com