这听起来像一种创新的做法,而不是在一个多对多,一对多的关系users_to_roles表,我作为一个十进制(int数据类型我相信定义了多个权限)。 这意味着为单个用户的所有权限都在一行。 它可能将没有意义,直到你读了其他问题和答复
我无法避开这一个我的大脑。 是否有人可以解释在转换过程? 这听起来“权利”,但我只是没有得到我怎样的角色转换为十进制之前,它在分贝去,以及如何获取转换回出来时的分贝。 我使用Java,但是如果你存根出来,这将是冷静的良好。
以下是在冷静机会的其他问题被删除原来的答案:
“我个人有时使用的权限标记枚举。这种方式可以使用枚举的项目的AND,OR,NOT和异或位运算。
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
}
然后,您可以组合使用几种权限和位运算符。
例如,如果一个用户可以查看和编辑用户,行动的二进制结果是0000 0011的转换为十进制是3。
然后,您可以存储到您的数据库的单个列的一个用户的权限(在我们的情况下,将3)。
在你的应用程序,你只需要一个按位操作(或)来验证用户是否具有特定权限或没有。“
您使用按位运算。 在伪代码就会像是:
bool HasPermission(User user, Permission permission) {
return (user.Permission & permission) != 0;
}
void SetPermission(User user, Permission permission) {
user.Permission |= permission;
}
void ClearPermission(User user, Permission permission) {
user.Permission &= ~permission;
}
权限是枚举类型的定义在您的文章,但不论如何,是需要基于这样一个整数类型。 同样适用于User.Permission领域。
如果这些经营者(&,| =和&=)没有意义给你,然后阅读了位运算(按位AND和按位或)。