我现在正在编写一个程序,需要管理用户权限,老的系统是数据库中定义一个字段,有1,2,3...代表用户可访问的权限,但如果一个用户需要多个权限,就非常困难,特别是系统的增加其他模块的权限,希望大虾们不吝赐教!谢谢! 
 
 回复人: gpo2002(苦思冥想) (  ) 信誉:100  2002-2-23  16:00:48  得分:10  
 
 
  定义一个权限表
  字段1----权限1
  字段2----权限2
  。
  Type  quanxian
          test1      As  Boolean
          test2      As  Boolean
          '.......
  End  Type 
Top 
 
 回复人: wuzhu(wuzhu) (  ) 信誉:100  2002-2-23  16:09:53  得分:10  
 
 
  权限1  0000  0001
    权限2  0000  0010
    权限3  0000  0100
    权限4  0000  1000
    ...  ... 
Top 
 
 回复人: tief(但求中庸) (  ) 信誉:100  2002-2-23  16:16:59  得分:20  
 
 
  '将权限值设置为2的倍数(但是包括1),比如:
  
  新建一个bas文件,书写如下代码:
  
  Const  READ_ACCESS  =  1
  Const  WRITE_ACCESS  =  2
  Const  DEL_ACCESS  =  4
  ....
  
  '在判断用户权限的时候可以使用:
  
  Public  Function  Permit(userpmt  As  Long,  pmt  As  Long)  As  Boolean
  
          If  (userpmt  And  pmt)  =  0  Then
                  Permit  =  False
          Else
                  Permit  =  True
          End  If
  
  End  Function
  
  比如可以这样使用:)
  
  
  Private  Sub  Form_Load()
  
          Dim  n  As  Long
          
          n  =  READ_ACCESS  Or  WRITE_ACCESS
          
          MsgBox  n
          
          MsgBox  Permit(n,  WRITE_ACCESS)
          MsgBox  Permit(n,  READ_ACCESS)
          MsgBox  Permit(n,  DEL_ACCESS)
  
  End  Sub
   
Top 
 
 回复人: tief(但求中庸) (  ) 信誉:100  2002-2-23  23:44:38  得分:0  
 
 
  是二的恩次方.sorry,下午写马虎了 
Top 
 
 回复人: junglerover(灌木丛) (  ) 信誉:100  2002-2-24  0:54:34  得分:30  
 
 
  更好的方法是把用户表和用户权限表分开,
  每个用户可以在权限表中有多条记录。 
Top 
 
 回复人: dbcontrols(泰山__抛砖引玉) (  ) 信誉:92  2002-2-24  9:02:12  得分:20  
 
 
  权限1包含权限2,权限2包含权限3... 
Top 
 
 回复人: szwanghuan(来历) (  ) 信誉:100  2002-2-24  9:20:29  得分:0  
 
 
  同意泰山 
Top 
 
 回复人: DullMan(愚人) (  ) 信誉:100  2002-2-24  17:19:13  得分:0  
 
 
  wuzhu(wuzhu)的办法不错    
   
Top 
 
 回复人: LiaoCheng(光辉岁月) (  ) 信誉:100  2002-2-24  19:25:51  得分:10  
 
 
  建立三个表,
  用户表:记录用户信息-主键UID
  功能模块表:记录所有功能模块-主键MID
  用户权限表:和以上两个表关联,主键ID,UID(关联用户表),MID(关联功能表) 
Top 
 
 回复人: mjunn(小马) (  ) 信誉:100  2002-2-25  8:47:32  得分:0  
 
 
  其实我一直想用二进制来解决这个问题,和WUZHU的方法差不多.但不知道如何判断二进制的位数,有什麽函数和方法是用它! 
Top 
 
 回复人: 40Star(陪你去看--☆流星雨★) (  ) 信誉:85  2002-2-25  9:00:47  得分:0  
 
 
  用字符串来管理权限
  如:当前用户的权限=234
  将此字符串拆开不就是它的所有权限了 
Top 
 
 回复人: fling_boy(男孩) (  ) 信誉:100  2002-2-25  9:01:37  得分:0  
 
 
  位运算符:and  ,or  ,not等. 
Top 
 
 回复人: mjunn(小马) (  ) 信誉:100  2002-2-25  9:32:32  得分:0  
 
 
  上面说的不知道清楚与否,举个例子:权限1为二进制00000001(十进制的1),权限2为二进制00000010(十进制的2),权限3为00000100(十进制的4).如果一个用户的权限包括权限1和3,则应该为十进制的1+4为5(二进制位00000101).但是不知道在VB中如何去之用这个方法.转换十进制和二进制的函数以及如何去判断二进制的位数的函数是什麽? 
Top 
 
 回复人: Rewiah(乘长风) (  ) 信誉:100  2002-2-25  9:48:35  得分:0  
 
 
  决不吝色 
Top 
 
 回复人: fling_boy(男孩) (  ) 信誉:100  2002-2-25  10:11:30  得分:0  
 
 
  5  and  1=1
    5  and  2=0
    5  and  4=1 
Top 
 
 回复人: tief(但求中庸) (  ) 信誉:100  2002-3-5  11:13:47  得分:0  
 
 
  TO小马:上面说的不知道清楚与否,举个例子:权限1为二进制00000001(十进制的1),权限2为二进制00000010(十进制的2),权限3为00000100(十进制的4).如果一个用户的权限包括权限1和3,则应该为十进制的1+4为5(二进制位00000101).但是不知道在VB中如何去之用这个方法.转换十进制和二进制的函数以及如何去判断二进制的位数的函数是什麽?
  
  
  我的例子就是做位运算的判断,你没有仔细看吧?