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)?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top