MySQL如何以性能方式存储数据+访问权限

时间:2010-10-11 13:44:44

标签: mysql optimization permissions

我最近遇到了一个问题,我只能想到泥泞的解决方案。

想象一下,桌子上有几个对象(让我们说照片可以让它变得更容易)。 每张照片/对象都必须拥有自己的一组权限。

1 - 上传者必须始终看到照片 2 - 照片属于一组照片,所有有权访问该组的用户都可以看到它 3 - 照片可以关闭并私密 4 - 照片可以是“授权的”用户特定的 5 - 照片可以被“拒绝”用户特定的

用户和照片组都会增长到适中的尺寸。

我不是在寻找SQL详细查询。只是希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

我想请注意,我目前在优化SQl方面没有太多经验,所以我的答案可能会给服务器带来太大的负担。

我会选择一个表,比如说photo_permission,它包含user_id和每个用户ID的授权photo_id之间的映射。类似的东西:

| user_id | photo_id |
| 1       | 1        |
| 1       | 3        |
| 2       | 1        |
| 2       | 2        |

如果某个用户的ID为user_id且某张照片的ID为photo_id,则该用户有权查看该照片。

如果您无法阻止有权访问包含照片的群组的用户的照片,您甚至可以简化上表

| authority_id | authority_type | photo_id |
| 1            | group          | 1        |
| 1            | user           | 3        |
| 2            | user           | 1        |
| 2            | group          | 2        |

现在,您可以检查用户的id是否列在具有authority_type用户的行上,或者在具有authority_type组的行上检查其ID是否为IN (SELECT id FROM user where group_id=authority_id)。请注意,上述代码未经过测试。