在C#中这是很常见找到以下枚举结构非二进制枚举标志
[Flags]
public enum Permission
{
Read = 1 << 1,
Create = 1 << 2,
Update = 1 << 3,
Destroy = 1 << 4
}
,它允许你加入枚举这样的:Permission.Read|Permission.Create
我现在面对的是一个不同的排序要求,我提出的解决方案是有问题的国际海事组织。
我需要让某种枚举实现多种类型premissions的 - 有些矛盾的,有些是不
,我想下面的排序功能
[Flags]
public enum Permission
{
Read1 = 1,
Read2 = 2,
Read3 = 3,
Write1 = 10,
Write2 = 20,
Write3 = 30,
Update1 = 100,
Update2 = 200,
Update3 = 300,
Destory = 1000,
Other = 10000,
SomethingElse = 100000,
}
当这亿韩元” t工作Permission.Read1|Permission.Read2
主要是因为它意味着用户现在拥有读取权限级别3
除了对每个权限使用不同的位标志(这将需要我的db保存比INT更大的整数,不好的理由),或者每个权限有不同的枚举(和列)(这会限制我的权限灵活性),并且没有编译时验证的形式(我想我可以创建某种工作环境的运行时验证)有没有其他的想法?
它是一种不同类型的权限,或者它是不同的权限对象?即。 Read1在对象类型XXX上读取,在YYY上读取2和Read3 ...等等? – Igor
这个结构主要是为了说明。实际权限调整为不同资源的权限级别,如在Read1..3中为对象xxx,Write1..3为对象YYY – gilmishal
然后您应该更改结构。如果它是一个类型,它将具有2个属性:'PermissionFlags','ObjectType'(对于关系数据库中的表,2列相同)。 ObjectType应该是权限适用的东西。尽可能保持您的权限。我怀疑是否有解决方案可以让你在编译时捕获权限的非法组合,你将不得不在数据库中创建运行时验证和/或添加验证逻辑。 – Igor