在涉及2个以上级别的数据库中存储权限的最佳方法是什么?目前只有2级权限,它们存储在桥接实体表中,如下所示:
UID | Buildings | Floor
------------------------
1 | A, B, C | F9
还有另一个名为Exceptions的表具有相同的结构,表明用户不应该拥有这些权限:
UID | Buildings | Floor
------------------------
1 | null | C4
因此,在上面的示例中,用户1将拥有建筑物F中第9层的权限,建筑物A,B和C中的所有房间,但不包括C中的第4层。
新要求是在楼层上添加更细粒度的权限级别。所以代码看起来像A1A,A1B等。建筑物和房间总是按字母顺序排列,楼层号码总是数字。 我无法更改这些代码的格式,因为它们来自外部来源。
处理这种情况的最佳方法是什么?我知道Linux处理组和用户使用位字符串的文件权限,但在我的情况下有数千个房间听起来不可行,而且用户/组事情只有两个级别。
我考虑过只添加一个名为Rooms
的新列并继续使用以逗号分隔的字符串,但有更好的方法吗?如果重要,我会使用MySQL。
答案 0 :(得分:0)
如果我必须实现这个,我会使用一个包含三列的表 - uid,type和element。 Uid引用用户,键入(建筑物,楼层,房间)和元素建筑物或地板或房间的代码。 我通常会为每个访问元素为每个人插入一行。
如果我确定元素的格式遵循严格的模式,我也可以变得更加大胆。例如
建筑物的代码只有字母
楼层的代码如letter.number
客房的代码如letter.number.letter
在上述情况下,您只能使用一个表与列uid和元素,因为从数据的格式中您可以提取元素的类型(如果它是建筑物,楼层或房间)。您还可以使用通配符进一步存储访问权限:
进入C楼的所有楼层和房间:C *
进入B楼6楼的所有房间:B6 *
甚至
访问所有楼层和建筑物中的所有C房间:** C
进入所有二楼:* 2 *
希望有所帮助