You*_*You 2 c# database enums user-permissions sql-server-2012
我试图找到一种方法将权限信息存储到SQL Server 2012数据库中.我的权限设置如下:
[Flags]
public enum PermissionsB
{
Aucun = 00000000,
read = 00000001,
write= 00000010,
ssss = 00000100,
tttt = 00001000,
rrrr = 00010000,
}
Run Code Online (Sandbox Code Playgroud)
而且我找不到存储到数据库中的方法,比方说00000011允许一个人在我的程序中读取/写入一些东西.我确实有一个int列准备存储,但无法弄清楚如何使用它.
你应该做这样的事情:
[Flags]
public enum PermissionsB
{
Aucun = 0,
read = 1,
write= 2,
ssss = 4,
tttt = 8,
rrrr = 16,
}
Run Code Online (Sandbox Code Playgroud)
或使用C#7数字文字语法,这可能会提高可读性:
[Flags]
public enum PermissionsB
{
Aucun= 0b00000,
read = 0b00001,
write= 0b00010,
ssss = 0b00100,
tttt = 0b01000,
rrrr = 0b10000,
}
Run Code Online (Sandbox Code Playgroud)
然后正如杰弗里所说,你应该使用按位运算:
PermissionsB permission = PermissionsB.read | PermissionsB.write;
Run Code Online (Sandbox Code Playgroud)
您将存储的值是一个整数,您可以直接转换它:
int intPermission = (int) permission;
Run Code Online (Sandbox Code Playgroud)
要恢复保存的权限,您可以这样做:
PermissionsB retrievedPermission = (PermissionsB) retrievedInteger;
Run Code Online (Sandbox Code Playgroud)
要测试单个权限,只需使用按位操作:
bool canWrite = (retrievedPermission & PermissionsB.write) == PermissionsB.write;
Run Code Online (Sandbox Code Playgroud)
实体框架(我认为EF> 4.5,如果我记得很好的话)可以很好地管理Enum类型,所以你不需要在数据库中强制转换Integer,我强烈建议在支持你的后端数据库的情况下使用EF.