在涉及两个以上级别的数据库中存储权限的最佳方法是什么?目前只有两个级别的权限,它们存储在一个桥接实体表中,如下所示:
UID | Buildings | Floor
------------------------
1 | A, B, C | F9
还有另一个名为“异常”的表,它具有相同的结构,表示用户不应该对这些表拥有权限:
UID | Buildings | Floor
------------------------
1 | null | C4
因此,在我上面的例子中,用户1有权进入F楼的9层,即A、B和C楼的所有房间,但C中的4楼没有权限。
新的要求是增加一个更细粒度的权限,房间在楼层。所以代码看起来像A1A,A1B等等。建筑物和房间总是字母顺序,楼层号码总是数字。I不能更改这些代码的格式,因为它们来自外部源.
处理这种情况最好的方法是什么?我知道Linux用一个字符串处理组和用户的文件权限,但在我的例子中有数千个空间听起来不可行,而且用户/组的事情也只有两个级别。
我已经考虑过添加一个名为Rooms
的新列,并继续使用逗号分隔的字符串,但是有更好的方法吗?如果有关系,我使用的是MySQL。
发布于 2014-10-23 04:29:23
如果我必须实现这一点,我将使用一个包含三个列- uid、type和元素的表。Uid引用用户、类型(建筑物、楼层、房间)并构成建筑物或楼层或房间的代码元素。我通常会在每个access元素中为每个人插入一行。
我也可以变得更加大胆,如果我确信元素的格式遵循严格的模式。例如
建筑物只会有字母代码
楼层将有类似letter.number的代码
房间里会有像letter.number.letter这样的代码
在上述情况下,您可以使用一个只有uid和元素列的表,因为根据数据的格式,您可以提取元素的类型(如果是建筑物、楼层或房间)。您还可以进一步使用通配符存储访问:
进入C楼所有楼层和房间的通道: C*
进入B楼6楼所有房间: B6*
甚至是
进入所有楼层和建筑物的所有C室:**C
进入所有二楼:*2*
希望它能帮上忙
https://stackoverflow.com/questions/25951967
复制相似问题