Pregunta

Estoy usando el patrón de repositorio para consultar nuestra base de datos usando NHibernate. Hace que sea realmente fácil hacer cosas como:

public T GetById (int id) {...}

Pero eso no ayuda mucho cuando alguien comienza a manipular las cadenas de consulta para ver cosas que no tienen permitido.

Para componerlo, algunos objetos son hijos profundamente anidados del objeto padre sobre el que se debe realizar la autorización.

Por ejemplo blog - > autor - > post - > comentario. En este ejemplo artificial, nos gustaría dar a los autores la posibilidad de editar sus propias publicaciones y comentarios sobre esas publicaciones, pero no ver ni editar las de otros autores. Es fácil verificar que la publicación pertenece al autor, es un poco más difícil asegurarse de que el comentario pertenece al autor. Tenemos algunas instancias que profundizan.

Entonces ... ¿cómo hacemos la autorización (en el modelo o repositorio)?

¿Fue útil?

Solución

¿Podría implementar el patrón de decorador? ¿Supongo que está utilizando un contenedor DP / IoC para inyectar sus depósitos IR?

Crearía un ISecureRepository que verifique que las llamadas realizadas sean válidas para el tipo de usuario / solicitud específico, y luego pase la llamada nuevamente al IRepository. Esto también le permite llamar al método y luego verificar el tipo de retorno ...

Luego configuraría su IoC para usar un ISecureRepository envuelto alrededor de IRepository ...

Suena tan simple ...

Otros consejos

Esta podría ser una buena implementación para sus necesidades: http: // www .codeproject.com / KB / web-security / objectlevelsecurity.aspx , es un modelo basado en ACL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top