Delphi перехват выполнения метода Execute TAction

Глобальный перехват выполнения некоторого TAction  весьма полезное дело ,когда GUI приложения изначально писался с использование TActionList и каждое действие GUI было оформлено в виде Action, поскольку рано или поздно необходимо будет делать модуль разграничения доступа к определенным действиям.Можно все захардкодить в  обработчки события OnUpdate для каждого Action. Это самое простое решение. однако в перспективе если изменить метод хранения и обработки правил разграничения доступа придется во всех модулях исправлять вызовы процедур проверки правдоступа или если совсем все было захардкодено переписывать все эти затычки, а так в глобальном перехватчике описать процедуру проверки прав и после проверки либо разрешить выполнения действия, либо пропустить, предварительно выдав сообщение о том, что не хватает прав доступа.  Сделать это можно так при помощи TApplicationEvent в обработчике ActionExecute.

procedure TdtmMain.ApplicationEvents1ActionExecute(Action: TBasicAction;
var Handled: Boolean);
begin
    {проверяем определен ли объект Action}
if Assigned(Action) then begin
       {проверяем Action задано ли имя объекта}
       if Action.Name <> ''  then
         ShowMessage('# CM_ACTIONEXECUTE Action.Name = '+Action.Name + #10#13+
           'Action.Owner.ClassName = '+Action.Owner.ClassName  );
         проверяем права доступа
         {Если хотим после этого разрешить выплнения Акшена, то Handled:= True;,
         запретить Handled:= False; }
         Handled:= True;
      end;
end;

В данной схеме лучше всего использовать связку имя формы имя акшена, для того что бы выделять атомарные действия, и по пользователю и его роли в системе определять нужно не нужно выполнять действие.

Share

Tags: , ,

Leave a Reply