我正在使用Laravel框架,并希望具有3种具有相关关系的数据库模型:
User M:N UserGroup
UserGroup 1:N GroupEntity
问题是-在UserGroup
的范围内-我想拥有User
特定的权利,以 view 和 edit 特定的{ {1}}。
到目前为止,我已经阅读并思考了以下内容:
1)
创建
GroupEntity
表,我将在每行白名单中添加权限。 我看到的问题是,这可能会导致大量必需的数据库行。
2)
在user_entity_rights(
int id,
int group_id,
int user_id,
int entity_id,
boolean can_view,
boolean can_edit)
表中,创建GroupEntity
和editable_by
JSON列,并将用户ID数组存储在其中。
这是一个更简单的解决方案,尽管由于ID并不直接存储在数据库列中,所以性能可能会出现巨大问题。
请注意,我希望 CRUD 操作经常会在版权上发生。
另外,也无法通过某些静态角色来预测实际的数据库数据绑定或预分组用户-用这些术语,我希望这种关系是完全“随机的”。
所以我的问题:
答案 0 :(得分:1)
您可以另外创建几个查询表。即:
EntityGroup_ViewableBy
和
EntityGroup_EditableBy
您的应用可以在每个会话开始时为给定用户点击一次,并将列表保存在内存中。即使您的用户拥有数百个实体组的权限,整数列表也不会占用太多内存。
这些表最终可能有很多行,但是相对于其余数据而言,两列整数仍然会很小,并且如果每个会话每个用户查询一次它们对性能几乎没有影响。
即使您不喜欢这种方法,我也建议您避免在单个数据库字段中存储值的集合。在几乎任何现实世界中的应用程序中,查找表都使每个级别(应用程序开发,数据库管理,数据库报告等)的管理和查询都更加容易,您认为通过将一些定界的集合塞入一个表中可以节省数据库空间和性能。单列向我表明值的数量不会很大。节省一些头痛,使用查找。