Pattern Repository e camadas. Onde posso aplicar segurança?
-
20-08-2019 - |
Pergunta
Eu estou fazendo o meu melhor para projetar meu aplicativo web com uma boa separação entre as camadas. Eu estou usando o padrão de repositório e, como tal, têm um SQLObjectRepository que se chama pelo meu ObjectService que se chama pelo meu front-end da Web.
No meu modelo de objeto, o usuário é associado a uma ou mais regiões que devem filtrar os objetos que eles devem ter acesso. A minha pergunta é, quando eu estou consultando para objetos, posso colocar o código no serviço para definir as permissões sobre os objetos, ou que deveria código estar no repositório? Se o usuário é um membro de 2 regiões, eu deveria passar o usuário como um parâmetro para o serviço, ou devo passar regiões do usuário para o serviço?
Solução
Eu faria:
-
Escrever a verificação de segurança de tal forma a que possa ser aplicado em qualquer lugar que você gosta. Desta forma, você pode refatorar como mudança de requisitos.
-
Se a verificação de segurança realmente irá sempre se candidatar, colocá-lo na camada de repositório (ou melhor, em um aspecto, se o seu idioma suporta) para que vários serviços serão todos de segurança ação ordinária se eles usam o mesmo repositório. Caso contrário, coloque-o no serviço (ou um aspecto agindo sobre o serviço).
-
passar todo o objeto de usuário para o mecanismo de verificação de segurança:
- Se a verificação de segurança mais tarde torna-se mais complexa (depende de outras propriedades do usuário) da API não vai mudar;
- faz sentido mais semântico -. Você está verificando o usuário tem permissão para fazer algo, não que a lista de países faz