2008-12-09 7 views
9

Estoy haciendo mi mejor esfuerzo para diseñar mi aplicación web con una buena separación entre las capas. Estoy utilizando el patrón de repositorio y, como tal, tengo un SQLObjectRepository al que llama mi ObjectService al que llama mi front end web.Repository Pattern and layering. ¿Dónde aplico la seguridad?

En mi modelo de objeto, el usuario está asociado con una o más regiones que deben filtrar los objetos a los que deberían tener acceso. Mi pregunta es, cuando estoy buscando objetos, ¿pongo el código en el servicio para establecer los permisos en los objetos o debería estar ese código en el repositorio? Si el usuario es miembro de 2 regiones, ¿debo pasar al usuario como un parámetro para el servicio, o debo pasar las regiones del usuario al servicio?

Respuesta

3

lo haría:

  • escribir el cheque de seguridad de tal manera que se puede aplicar en cualquier lugar que desee. De esta forma, puede refactorizar a medida que cambian los requisitos.

  • Si la comprobación de seguridad será realmente siempre aplicar, colocarlo en la capa de repositorio (o mejor, en un aspecto si su idioma es compatible) para que varios servicios serán todos de seguridad común cuota de si utilizan el mismo repositorio . De lo contrario, colóquelo en el servicio (o un aspecto que actúe sobre el servicio).

  • pase todo el objeto de usuario al mecanismo de verificación de seguridad:

    • si la comprobación de seguridad más tarde se vuelve más compleja (depende de otras propiedades de usuario) de la API no cambiará;
    • tiene más sentido semántico: está comprobando que el usuario tiene permiso para hacer algo, no una lista de países.