我现在正在编写一个程序,需要管理用户权限,老的系统是数据库中定义一个字段,有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中如何去之用这个方法.转换十进制和二进制的函数以及如何去判断二进制的位数的函数是什麽?
我的例子就是做位运算的判断,你没有仔细看吧?
回复人: 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中如何去之用这个方法.转换十进制和二进制的函数以及如何去判断二进制的位数的函数是什麽?
我的例子就是做位运算的判断,你没有仔细看吧?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货