用户多级权限判断

unit AdmitLevelUnit;

interface

uses
  Classes, SysUtils;

////////////////////////////////////////////////////////////////////////////////
// 权限判断
// 函数SmallLevel可以判断64种权限  状态值为2^0=1,2^1=2,2^2=4,8,16....2^64
// 函数BigLevel可以判断36*36=1296种权限 '00','01',..'0z','10','11'....'zz'
// SmallLevel($1000,$111) result=false  SmallLevel($10,$111) result=true
// BigLevel('39','asef8392') result=false  BigLevel('83','asef8392') result=true
// PermitLevel为当前权限值 Userlevel为用户拥有的权限值
// 返回值true,为用户拥有当前权限值 false为用户没有当前权限值
////////////////////////////////////////////////////////////////////////////////
type
  TAdmitLevel = class(TObject)
  public
    class function SmallLevel(PermitLevel,Userlevel : int64): boolean;
    class function BigLevel(PermitLevel,Userlevel  : String): boolean;
  end;

implementation

class function TAdmitLevel.SmallLevel(PermitLevel,Userlevel : int64): boolean;
begin
  result:=false;
  if (PermitLevel and Userlevel)>0 then result:=true;
end;
class function TAdmitLevel.BigLevel(PermitLevel,Userlevel  : String): boolean;
var
  ipos:integer;
begin
  result:=false;
  if length(PermitLevel)<>2 then exit;
  PermitLevel:=lowercase(PermitLevel);
  Userlevel:=lowercase(Userlevel);
  ipos:=pos(PermitLevel,Userlevel);
  while ipos >0 do
    if (ipos mod 2)=1 then
    begin
      result:=true;
      break;
    end
    else
    begin
      Userlevel:=copy(Userlevel,ipos+1,1296);
      ipos:=pos(PermitLevel,Userlevel);
    end;
end;

end.  

posted @ 2006-05-06 22:12  小洋房  阅读(877)  评论(0编辑  收藏  举报