比如“01”代表制单,“02”代表查询………………表里有power字段存储这些权限,请问这些数字之间用什么分隔符好呢?“|”好像是有转义的问题,“,”怎么样呢?
另外,这些数字(权限)的存储怎么操作好呢?比如删除一个权限(数字),添加一个权限,数字
求思路,万分感谢

解决方案 »

  1.   

    你应该增设一个权限人员关联表,对权限的增删改集中在关联表,而不是利用分隔符
    T_Authority//权限表
    ID  Desc
    01  制单T_Temp//关联表
    ID AuthorityId  PersonId
      

  2.   

    权限不超过 256个 就用  tinyint  net 里对应  Byte 一般不会超过256如果超过用int;
    我一般 分开单个存储 而不是一群放一起既然都是数字 放一起 用 ,就可以了
      

  3.   

    同意楼上的,增加字段,canRead,canAdd,canEdit,canDelete,对每个模块的管理
      

  4.   

    可以用Flags enum,用一个整数来存储某人的权限的组合,在判断权限时进行&操作即可。
      

  5.   

    比如下面这个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;
      

  6.   

    实际上所谓数据库表设计,需要你首先把大白话说清楚,而不必过度地搞什么“数字ID,分隔符”这类的东西。好的设计往往让外行也能看懂。例如我们可以有一个针对人员的授权表:
       人员       授权
       ----      ----
       张三       制单
       张三       查询
       张三       负责每天晚上锁门这可以让普通的文秘也看得懂。而你搞什么ID编号,甚至搞什么字符串拼接,都太技术化了。太技术的东西我看是不需要的。虽然你想通过学习编程而学习一些技术,但是其实技术稍微过头了就是有害的,会把脑子烧得脱离了应用需要。
      

  7.   

    漏了一个删除权限            //删除权限c
                qx ^= qx & QuanXian.c;
                //删除权限d,qx不包含d的情况下删除d,同样的操作,没有问题
                qx ^= qx & QuanXian.d;
      

  8.   

    谢谢,这个是我需要的。可是里面的有些东西不大懂.如"!="和"^="和"&"是什么意思呢?
      

  9.   

    用枚举实际上用一个整数取代了你那一大串字符串,并且在设置和判断时更方便,就是一个算式。
    一个整数总共32位,代表32种权限(该位0就是没权限,1就是有权限),flags枚举将它包装为枚举的值。| & ^ 这些都是位运算符,flags枚举本质就是各个位的组合,同样适用位运算,你可以查看一下http://msdn.microsoft.com/zh-cn/library/cc138362.aspx“枚举类型作为位标志”这一节。除了前面贴的增删和判断权限的方法,Enum.TryParse也可以方便的将你界面上的字符串转换为枚举,ToString()方法也可以方便的转为字符串显示到界面上。