怎么做菜单权限管理(要求很简单有一串字符111100,1有权限,0无权限)
如何做菜单权限管理(要求很简单有一串字符111100,1有权限,0无权限)
如何做菜单权限管理(要求很简单有一串字符111100,1有权限,0无权限)
权限表只有一个如下:
xm qx pass
系统管理员 111111111111 1231
张三 010011110010 41132
------解决方案--------------------
楼主不嫌麻烦的话可以在form.create属性下写代码去判断用户对各菜单的权限。
先读取权限值存入str变量,然后用copy函数取得各位的数值:q1 := copy(str,1,1)
再进行判断,if q1=0 then N1.enable := false;
------解决方案--------------------
1、将所有菜单全部不可见或者不可用;
2、读取权限值 cs;
3、循环用 and 找出值不为 0 的权限值,然后找到相应菜单,然后让其可见或者可用,例如:
for i := 0 to 31 do begin
c := 1 shl i;
if (cs and c) > 0 then begin
...
end;
end;
------解决方案--------------------
代码最少的办法: 在集合中(如数据库)保存各个控件(按扭/菜单/等)的name,登录时遍历窗体控件,不同用户查询的集合不同,非集合内的name一律禁用(或设置不可见)。
------解决方案--------------------
1、将所有菜单全部不可见或者不可用;
2、读取权限值 cs(字符串值);
for i := 1 to Length(CS) do
begin
菜单.Visible:=Bool(strtoint(CS[i]));
end;
------解决方案--------------------
自动遍历得出所有菜单项,对每个菜单项进行权限设置,即设置有权操作的用户,按照遍历菜单顺序,为每个用户生成一个权限字符串保存,然后将菜单顺序保存。
启动后,讲菜单顺序读取到一个队列或栈中,通俗的点说就是读取到一个listbox中保存,在进行菜单操作时,根据菜单项内容,得出菜单在队列中序号,然后获取用户权限字符串相应位置的字符内容,1有权操作,0无权操作
------解决方案--------------------
有更简单的。
var
s:String;
s:=adoquery1.FieldByName('qx').asstring;
btn1.Enabled:=s[1]='1';
btn2.Enabled:=s[2]='1';
btn3.Enabled:=s[3]='1';
硬写吧。
------解决方案--------------------
我写了一个,大家给点意见。测试可行。
如何做菜单权限管理(要求很简单有一串字符111100,1有权限,0无权限)
权限表只有一个如下:
xm qx pass
系统管理员 111111111111 1231
张三 010011110010 41132
------解决方案--------------------
楼主不嫌麻烦的话可以在form.create属性下写代码去判断用户对各菜单的权限。
先读取权限值存入str变量,然后用copy函数取得各位的数值:q1 := copy(str,1,1)
再进行判断,if q1=0 then N1.enable := false;
------解决方案--------------------
1、将所有菜单全部不可见或者不可用;
2、读取权限值 cs;
3、循环用 and 找出值不为 0 的权限值,然后找到相应菜单,然后让其可见或者可用,例如:
for i := 0 to 31 do begin
c := 1 shl i;
if (cs and c) > 0 then begin
...
end;
end;
------解决方案--------------------
代码最少的办法: 在集合中(如数据库)保存各个控件(按扭/菜单/等)的name,登录时遍历窗体控件,不同用户查询的集合不同,非集合内的name一律禁用(或设置不可见)。
------解决方案--------------------
1、将所有菜单全部不可见或者不可用;
2、读取权限值 cs(字符串值);
for i := 1 to Length(CS) do
begin
菜单.Visible:=Bool(strtoint(CS[i]));
end;
------解决方案--------------------
自动遍历得出所有菜单项,对每个菜单项进行权限设置,即设置有权操作的用户,按照遍历菜单顺序,为每个用户生成一个权限字符串保存,然后将菜单顺序保存。
启动后,讲菜单顺序读取到一个队列或栈中,通俗的点说就是读取到一个listbox中保存,在进行菜单操作时,根据菜单项内容,得出菜单在队列中序号,然后获取用户权限字符串相应位置的字符内容,1有权操作,0无权操作
------解决方案--------------------
有更简单的。
var
s:String;
s:=adoquery1.FieldByName('qx').asstring;
btn1.Enabled:=s[1]='1';
btn2.Enabled:=s[2]='1';
btn3.Enabled:=s[3]='1';
硬写吧。
------解决方案--------------------
我写了一个,大家给点意见。测试可行。
- Delphi(Pascal) code
function preOrder(sender:TObject;no:integer):integer; var node:TMenuItem; root:TMainMenu; i:integer; begin// result:=no; if(sender is TMainMenu) then begin root:=sender as TMainMenu; if root<>nil then for i:=0 to root.Items.Count-1 do begin inc(result); result:=preOrder(root.Items[i],result); end; end else begin node:=sender as TMenuItem; doSomeThing(node,'1000111110100',no); if node<>nil then begin for i:=0 to node.Count-1 do begin inc(no); result:=preOrder(node.Items[i],no); end; end; end; end; procedure doSomeThing(node:TMenuItem;right:string;no:integer); begin // node.Enabled:=right[no]='1'; end;
------解决方案--------------------
- Delphi(Pascal) code
function GetNum(Popnum: string; Position: Byte): Boolean; begin if Copy(Popnum, Position, 1) = '1' then Result := True else Result := False; end;