C# 多个权限作为数据库中的单个整数

C# 多个权限作为数据库中的单个整数,c#,asp.net,sql-server,enums,C#,Asp.net,Sql Server,Enums,我正在一个论坛上工作,我想在DB中保存用户权限。 我的想法是: USER TABLE HAS: (besides name, login etc) fk_role_id ROLE TABLE HAS: role_id role_name role_rights 然后我有一个Enum,具有用户权限和用户类: [Flags] public enum PermissionTypes : int { None = 0, Register = 1, ThreadCreate =

我正在一个论坛上工作,我想在DB中保存用户权限。 我的想法是:

USER TABLE HAS: (besides name, login etc)
fk_role_id

ROLE TABLE HAS:
role_id
role_name
role_rights
然后我有一个
Enum
,具有用户权限和用户类:

[Flags] public enum PermissionTypes : int {
    None = 0,
    Register = 1,
    ThreadCreate = 2,
    ThreadEdit = 4,
    ThreadDelete = 8,
    ReplyCreate = 16,
    ReplyEdit = 32,
    ReplyDelete = 64,
    CatCreate = 128,
    CatEdit = 256,
    CatDelete = 512,
    UserCreate = 1024,
    UserEdit = 2048,
    UserDelete = 4096,

    All = Register | ThreadCreate | ThreadEdit | ThreadDelete | ReplyCreate | ReplyEdit | ReplyDelete | CatCreate | CatEdit | CatDelete | UserCreate | UserEdit | UserDelete
}

public class User {
    public PermissionTypes Permissions = PermissionTypes.None;
}
现在是否可以将用户权限保存为
role\u rights
中的int?然后再把他们弄出来

更新:

只是想弄清楚我的问题是什么。。。 外汇。如果我有一个拥有以下权限的用户:CatCreate&UserCreate,那么我总共有:1152。。。 现在,我如何使用该数字来测试用户拥有哪些权限?现在是一个小数点

是的

如果要检查某个值,例如“CatDelete”,则需要执行以下操作:
Permissions&PermissionTypes.CatDelete==PermissionTypes.CatDelete

要删除一个值:
Permissions&=~PermissionTypes.CatDelete


要添加一个值:
Permissions |=PermissionTypes.CatDelete

是的,但我的问题是如何在数据库中保存用户权限。。。使用此方法时…类似于
“更新用户设置权限=“+(int)Permissions+”,其中ID=“+ID
。。。但请为此使用sqlcommand+参数。^;好的,如果你有一个单独的“角色”表,你可能需要有一个中间的n到m表“UserRoles”或其他什么。你只有UserID和RoleID(两者的组合是唯一的)。你不能只有一个“组合”“用户表中的FK字段。好的,将权限属性的
int
值保存在
Role\u Rights
中。”。现在用户U有一个对角色27的引用,该角色的权限为160。因此
(Role\U Rights&128)=128
(Role\U Rights&32)=32
应该返回true,这意味着用户U同时拥有CatCreate和ReplyEdit。任何其他内容,如
(Role\U Rights&8)=8
都应返回false,这意味着用户U没有权限删除线程。所谓“权限对象”是指属性
User.Permissions
?然后您可以将int强制转换为枚举:
User.Permissions=(PermissionTypes)1152。您认为这样做节省了什么?但问题是什么?你肯定知道如何存储整数并查询它吗?刚刚更新了我的问题。。。我猜我不想这样做,必须创建一个包含用户可以访问的函数的表,以及另一个将函数绑定到角色的表。。。因此,我只需要一个带有小数点的角色表,从中我可以看到用户可以访问什么…首先:为什么要将其保存为小数点?如果是int,则另存为int。第二:查看我的答案。您将1152存储在变量
pValue
中。现在
((pValue&PermissionTypes.CatCreate)==PermissionTypes.CatCreate)
将为真,
((pValue&PermissionTypes.CatCreate)==PermissionTypes.UserCreate)
也将为真。但是
((pValue&PermissionTypes.ThreadDelete)=PermissionTypes.ThreadDelete)
为false