Como lidar com autorização ao usar NHibernate em .NET
-
08-07-2019 - |
Pergunta
Eu estou usando o padrão de repositório para consultar nosso banco de dados usando NHibernate. Isso torna muito fácil de fazer coisas como:
pública T GetById (int id) {...}
Mas isso não ajuda muito quando alguém começar mucking com as querystrings para ver coisas que não estão autorizados a.
crianças Para agravar-lo, alguns objetos estão profundamente aninhados do objeto pai que a autorização deve ser realizada por diante.
Por exemplo blog -> autor -> pós -> comentários. Neste exemplo inventado nós gostaríamos de dar aos autores a possibilidade de editar suas próprias mensagens e comentários sobre esses lugares, mas não ver ou editar os de outros autores. É fácil de verificar o posto pertence ao autor, que é um pouco mais difícil para garantir que o comentário pertence ao autor. Nós temos alguns casos que vão mais fundo.
Então ... como é que vamos fazer a autorização (no modelo ou repositório)?
Solução
Você poderia implementar o padrão Decorator -? Eu presumo que você está usando um IoC Container DP / para injetar seus IRepositories
Você iria criar um ISecureRepository que verifica as chamadas feitas são válidas para o tipo de usuário específico / pedido, e depois passou a parte de trás chamada para o IRepository. Isso também dar-lhe a capacidade de chamar o método, em seguida, verifique o tipo de retorno ...
Você iria em seguida, a configuração estiver IoC para usar um ISecureRepository enrolado em torno IRepository ...
Parece tão simples ...
Outras dicas
Esta pode ser uma boa aplicação para suas necessidades: http: // www .codeproject.com / KB / web-security / objectlevelsecurity.aspx , é um modelo baseado em ACL.