我打算在这里问一个问题,关于我对某些用户/角色数据库表的设计是否可以接受,但经过一些研究,我遇到了这个问题:
这听起来像是一种创新方法,因此我将多个权限定义为单个小数(我假设为 int 数据类型),而不是多对多关系 users_to_roles 表。这意味着单个用户的所有权限都在一行中。在您阅读其他问题和答案之前,它可能没有意义
我无法解决这个问题。有人可以解释一下转换过程吗?这听起来“正确”,但我只是不知道如何在角色进入数据库之前将其转换为小数,以及当它从数据库中出来时如何转换回来。我正在使用 Java,但如果你把它去掉,那也很酷。
这是另一个问题被删除的机会的原始答案:
“就个人而言,我有时会使用标记的权限枚举。这样你就可以对枚举项使用 AND、OR、NOT 和 XOR 位运算。
[Flags]
public enum Permission
{
VIEWUSERS = 1, // 2^0 // 0000 0001
EDITUSERS = 2, // 2^1 // 0000 0010
VIEWPRODUCTS = 4, // 2^2 // 0000 0100
EDITPRODUCTS = 8, // 2^3 // 0000 1000
VIEWCLIENTS = 16, // 2^4 // 0001 0000
EDITCLIENTS = 32, // 2^5 // 0010 0000
DELETECLIENTS = 64, // 2^6 // 0100 0000
}
然后,您可以使用 AND 位运算符组合多个权限。
例如,如果用户可以查看和编辑用户,则操作的二进制结果是 0000 0011 转换为十进制是 3。然后您可以将一个用户的权限存储到数据库的单个列中(在我们的例子中它会是 3)。
在您的应用程序中,您只需要另一个按位运算 (OR) 来验证用户是否具有特定权限。”