utorização @Delphi DataSnap que não respeita o atributo TRoleAuth

Estou tentando implementar a autorização em um aplicativo Delphi XE DataSnap. Dividi isso em um exemplo muito simples, mas ainda não vejo os efeitos do atributo TRoleAuth para um método ou class

Here é uma classe DSServerMethods simples que inclui os métodos de amostra gerados. A classe foi decorada com as funções de convidado e de qualquer pessoa autorizada, e a indesejada função negada. O método ReverseString foi decorado com a função negada somente leitura:

type
  [TRoleAuth('guest,anyone','unwelcome')]
  TMyDSServerMethods = class(TDSServerModule)
    DataSetProvider1: TDataSetProvider;
  ...
  public
    { Public declarations }
    function EchoString(Value: string): string;
    [TRoleAuth('','readonly')]
    function ReverseString(Value: string): string;
    ...
  end;

Estou atribuindo funções no método OnUserAuthenticate. Por exemplo, eu tenho um usuário para quem estou atribuindo a função somente leitura de OnUserAuthenticate, uma função que acredito que deve negar a permissão do usuário para executar a função ReverseStrin

Pelo que entendi, meu código deve comparar as funções do usuário com as TStrings EventObject.AuthorizedRoles e EventObject.DeniedRoles do método OnUserAuthorize do TDSAuthenticationManager e definir o parâmetro formal válido desse método de acord

Aqui está um método OnUserAuthorize simples que estou usando para tesing. Quando eu passo nele usando o depurador em resposta a um usuário com a função somente leitura tentando invocar ReverseString, EventObject.AuthorizedRoles e EventObject.DeniedRoles são nulos, e EventObject.Roles contém a função somente leitur

procedure TServerContainer1.DSAuthenticationManager1UserAuthorize(
  Sender: TObject; EventObject: TDSAuthorizeEventObject;
  var valid: Boolean);
begin
  outputdebugstring(PChar(Eventobject.UserName));
  if EventObject.UserRoles <> nil then
    outputdebugstring(PChar(eventobject.UserRoles.Text));
  if EventObject.AuthorizedRoles <> nil then
    outputdebugstring(PChar(eventobject.AuthorizedRoles.Text));
  if EventObject.DeniedRoles <> nil then
    outputdebugstring(PChar(eventobject.DeniedRoles.Text));
  valid := True;
end;

stou perdendo o ponto ou existe uma propriedade que eu precise definir em algum lugar para permitir que o atributo TRoleAuth funcion

= = = = = = = = = = Editar: Mat DeLong forneceu a resposta. A unidade DSAuth (onde a classe de atributo customizado TRoleAuth é declarada) estava ausente na seção de interface da unidade na qual o descendente DSServerModule foi definido.

questionAnswers(1)

yourAnswerToTheQuestion