比如下面这个enum [Flags] enum QuanXian { a = 0x01, b = 0x02, c = 0x04, d = 0x08, e = 0x10, f = 0x20, g = 0x40, h = 0x80 }进行权限操作时 QuanXian qx = new QuanXian(); //设置权限a,c qx |= QuanXian.a | QuanXian.c; //判断是否满足权限a bool m = (qx & QuanXian.a) == QuanXian.a; //将数据库的整数转为enum qx = (QuanXian)5; //将enum转为整数存入数据库 int n = (int)qx;
T_Authority//权限表
ID Desc
01 制单T_Temp//关联表
ID AuthorityId PersonId
我一般 分开单个存储 而不是一群放一起既然都是数字 放一起 用 ,就可以了
enum QuanXian
{
a = 0x01,
b = 0x02,
c = 0x04,
d = 0x08,
e = 0x10,
f = 0x20,
g = 0x40,
h = 0x80
}进行权限操作时 QuanXian qx = new QuanXian();
//设置权限a,c
qx |= QuanXian.a | QuanXian.c;
//判断是否满足权限a
bool m = (qx & QuanXian.a) == QuanXian.a;
//将数据库的整数转为enum
qx = (QuanXian)5;
//将enum转为整数存入数据库
int n = (int)qx;
人员 授权
---- ----
张三 制单
张三 查询
张三 负责每天晚上锁门这可以让普通的文秘也看得懂。而你搞什么ID编号,甚至搞什么字符串拼接,都太技术化了。太技术的东西我看是不需要的。虽然你想通过学习编程而学习一些技术,但是其实技术稍微过头了就是有害的,会把脑子烧得脱离了应用需要。
qx ^= qx & QuanXian.c;
//删除权限d,qx不包含d的情况下删除d,同样的操作,没有问题
qx ^= qx & QuanXian.d;
一个整数总共32位,代表32种权限(该位0就是没权限,1就是有权限),flags枚举将它包装为枚举的值。| & ^ 这些都是位运算符,flags枚举本质就是各个位的组合,同样适用位运算,你可以查看一下http://msdn.microsoft.com/zh-cn/library/cc138362.aspx“枚举类型作为位标志”这一节。除了前面贴的增删和判断权限的方法,Enum.TryParse也可以方便的将你界面上的字符串转换为枚举,ToString()方法也可以方便的转为字符串显示到界面上。