如何存储权限二进制集

本文关键字:权限 二进制 存储 何存储 | 更新日期: 2023-09-27 18:35:38

我正在尝试找到一种方法将权限信息存储到SQL Server 2012数据库中。我的权限设置如下:

[Flags]
public enum PermissionsB
{
    Aucun = 00000000,
    read = 00000001,
    write= 00000010,
    ssss = 00000100,
    tttt = 00001000,
    rrrr = 00010000,
}

而且我找不到一种方法来存储到数据库中,比方说,00000011允许人们访问我的程序中读/写一些东西。我确实有一个 int 列准备存储它,但还不知道如何使用它。

如何存储权限二进制集

你应该做这样的事情:

[Flags]
public enum PermissionsB
{
    Aucun = 0,
    read = 1,
    write= 2,
    ssss = 4,
    tttt = 8,
    rrrr = 16,
}

或使用 C# 7 数字文本语法,这可能会提高可读性:

[Flags]
public enum PermissionsB
{
    Aucun= 0b00000,
    read = 0b00001,
    write= 0b00010,
    ssss = 0b00100,
    tttt = 0b01000,
    rrrr = 0b10000,
}

然后正如 Jeffrey 所说,你应该使用按位运算:

PermissionsB permission = PermissionsB.read | PermissionsB.write;

您将存储的值是一个整数,您可以直接强制转换它:

int intPermission = (int) permission;

要恢复保存的权限,您可以简单地执行以下操作:

PermissionsB retrievedPermission = (PermissionsB) retrievedInteger;

若要测试单个权限,只需使用按位运算:

bool canWrite = (retrievedPermission & PermissionsB.write) == PermissionsB.write;

实体框架(如果我记得不错的话,我认为 EF> 4.5)可以对 Enum 类型进行传输,因此您无需在数据库中的 Integer 强制转换,如果您支持后端数据库,我强烈建议使用 EF。

您需要在枚举上使用按位或按位|

PermissionsB permission = PermissionsB.read | PermissionsB.write;

有关 C# 中枚举的详细信息,请参阅此处

有关使用按位枚举的非常详细的信息,请参阅此处