用户多级权限判断,最适合不同级别用户可以浏览不同的面板组
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.
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.