你需要创建三个表,一个用户表,一个模块表(与菜单对应),一个权限表,然后可以使用和一下差不多的方法确定用户是否有权限操作该菜单: function TfmMain.qxCheck(FirstModule:string;SecondModule:string):Boolean; begin Try with DMStoreManage.Query1 do begin Close; SQL.Clear; SQL.Append('SELECT GRANTPR FROM TOPERATORGRANT WHERE OPERATORCODE=:OPERATORCODE AND FMODULECODE=:FMODULECODE and SMODULECODE=:SMODULECODE'); ParamByName('OPERATORCODE').AsString:=CurrentOperatorCode; ParamByName('FMODULECODE').Asstring:=FirstModule; ParamByName('SMODULECODE').Asstring:=SecondModule; Open; If RecordCount>0 then Begin First; if FieldByName('GRANTPR').AsInteger<>0 then Result:=True else Result:=False; End Else Result:=False; Close; end; except end; end; //可以在Action时间里使用上面的函数 If qxCheck('05','0501') Then Begin fmMoneyRecall:=TfmMoneyRecall.Create(Application); fmMoneyRecall.Show; End Else Application.MessageBox('您没有权限使用','确认',MB_OK OR MB_ICONEXCLAMATION);
2 将权限映射到操作的功能模块--比如你的菜单
3 你可以在初始化时按照2将没权限的功能disable,或者在acton里面在判断是否有权限。
function TfmMain.qxCheck(FirstModule:string;SecondModule:string):Boolean;
begin
Try
with DMStoreManage.Query1 do
begin
Close;
SQL.Clear;
SQL.Append('SELECT GRANTPR FROM TOPERATORGRANT WHERE OPERATORCODE=:OPERATORCODE AND FMODULECODE=:FMODULECODE and SMODULECODE=:SMODULECODE');
ParamByName('OPERATORCODE').AsString:=CurrentOperatorCode;
ParamByName('FMODULECODE').Asstring:=FirstModule;
ParamByName('SMODULECODE').Asstring:=SecondModule;
Open;
If RecordCount>0 then
Begin
First;
if FieldByName('GRANTPR').AsInteger<>0 then
Result:=True
else
Result:=False;
End
Else
Result:=False;
Close;
end;
except
end;
end;
//可以在Action时间里使用上面的函数
If qxCheck('05','0501') Then
Begin
fmMoneyRecall:=TfmMoneyRecall.Create(Application);
fmMoneyRecall.Show;
End
Else
Application.MessageBox('您没有权限使用','确认',MB_OK OR MB_ICONEXCLAMATION);