怎么做菜单权限管理(要求很简单有一串字符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';
硬写吧。
------解决方案--------------------
我写了一个,大家给点意见。测试可行。
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;