1

我正在开发在 CakePHP 2 框架上运行的项目。在这个应用程序中,我有:

楷模:

Wallnote, User, Group

关系:

Group HABTM User
Wallnote HABTM User
Wallnote HABTM Group

表:

wallnotes

 - id
 - user_id (owner id)
 - ...

users_wallnotes

 - user_id
 - wallnote_id

groups_wallnotes

 - group_id
 - wallnote_id

groups_users

 - group_id
 - user_id

我正在使用“Wallnote HABTM 用户”和“Wallnote HABTM 组”关系作为过滤器,即 user_id/group_id(6) wallnote_id(10) 的意思是,ID 为 10 的墙注将分别对 ID 为 6 的用户可见id 为 6 的组中的用户。

我想找到所有符合这些条件的wallnotes:

  1. 登录的用户是此wallnote 的所有者或
  2. wallnote 与登录用户共享 -> 在表 users_wallnotes 中记录或
  3. wallnote 已与某个组共享,并且登录的用户是该组的成员

可以使用 find() 函数来做到这一点吗?

感谢您的回答。

4

1 回答 1

1

您有两个角色:组和用户。单独处理用户和组非常困难......我认为标准方法是您对每个用户和组都有独特的角色,为了处理这个你必须有这个表:

wallnotes
 - id
 - user_id (owner id)
 - ...

roles
 - id
 - user_id
 - group_id
(each rows in this table have group_id or user_id , no both of them)

roles_wallnotes
 - id
 - role_id
 - wallnote_id

当您创建用户(或组)时,您必须为其创建角色。所以所有的组和用户,现在都有唯一的 id。

例如,您有 2 个组(具有 1,2 个 ID)和 4 个用户(具有 1,2,3,4 个 ID),然后:

users :
|id|name |
---|------
1  | user1
2  | user2
3  | user3
4  | user4

groups :

|id|name |
---|------
1  | group1
2  | group2

roles :
|id| user_id | group_id |
---|---------|----------|
1  |   1     |  null    | 
2  |   2     |  null    |
3  |   3     |  null    |
4  |   4     |  null    |
5  |  null   |   1      |
6  |  null   |   2      |

现在你必须有这个关系:

Role hasOne Group
Role hasOne User
Wallnote HABTM Role

有了这个解决方案,您可以轻松地使用查找功能来检索您需要的数据...

于 2012-08-29T07:22:18.920 回答