Padrão de Repositório e camadas. Onde eu aplico segurança?

10

Estou fazendo o possível para projetar meu aplicativo da web com boa separação entre as camadas. Eu estou usando o padrão de repositório e, como tal, tenho um SQLObjectRepository que é chamado pelo meu ObjectService, que é chamado pelo meu front-end da Web.

No meu modelo de objeto, o usuário está associado a uma ou mais regiões que devem filtrar os objetos aos quais devem ter acesso. Minha pergunta é, quando estou consultando objetos, coloco o código no serviço para definir as permissões nos objetos, ou esse código deve estar no repositório? Se o usuário é membro de duas regiões, devo passar o usuário como um parâmetro para o serviço ou devo passar as regiões do usuário para o serviço?

    
por Devon 09.12.2008 в 19:49
fonte

1 resposta

3

Eu gostaria de:

  • Escreva a verificação de segurança de modo que ela possa ser aplicada em qualquer lugar que você desejar. Dessa forma, você pode refatorar à medida que os requisitos mudam.

  • Se a verificação de segurança realmente sempre se aplicar, coloque-a na camada de repositório (ou melhor, em um aspecto se o seu idioma oferecer suporte) para que vários serviços compartilhem segurança comum se eles usam o mesmo repositório. Caso contrário, coloque-o no serviço (ou um aspecto atuando no serviço).

  • passe o objeto de usuário inteiro para o mecanismo de verificação de segurança:

    • se a verificação de segurança mais tarde se tornar mais complexa (depende de outras propriedades do usuário), a API não será alterada;
    • faz mais sentido semântico - você está verificando se o usuário tem permissão para fazer algo, não que uma lista de países o faça.
por Dan Vinton 09.12.2008 / 22:56
fonte