2011-05-19 12 views
7

Estoy trabajando en un sitio que tiene un esquema de base de datos como un árbol. De arriba a abajo tengo:Diseño de un sistema de permiso de usuario de varios niveles

  • Una empresa puede tener muchos
  • ubicaciones que pueden tener muchas
  • flotas que pueden tener muchas
  • Vehículos

El sistema de permisos de usuario ser flexible en cuanto a que alguien puede ganar o tener acceso restringido en cualquier nivel del árbol. Por ejemplo, una persona que gestiona la ubicación x tendrá acceso completo a todas las flotas debajo de la ubicación xy a todos los vehículos debajo de la ubicación x. Pero también debería poder restringir el acceso del usuario a cualquier nodo debajo de la ubicación x.

¿Cuál sería la forma correcta de desarrollar un esquema para un sistema de permisos como este? ¿Sería realista almacenar cada nodo al que un usuario tiene acceso aunque sea redundante? El objetivo es que pueda ejecutar fácilmente consultas, por ejemplo, para obtener todas las ubicaciones a las que tiene acceso un usuario.

+4

no tengo la energía para escribir una respuesta completa, por lo que sólo voy a comentar en su lugar y dejar que otro llene los espacios en blanco. Todo lo que acaba de describir se puede lograr mediante el uso de herencia a través de una ACL. Lista de control de acceso. Puede configurar las ubicaciones como recursos en su lista de control de acceso (ACL) y sus flotas también pueden ser recursos. De este modo, permite el acceso a los usuarios. Alternativamente, podría usar una jerarquía de conjunto de modelos anidados e ignorar la ACL por completo y simplemente dar acceso a los usuarios a los nodos que se encuentran entre los valores de lFT y RGT en el árbol. es decir, SELECCIONE * desde ubicaciones donde lft ENTRE 4 y 54. – Layke

Respuesta

Cuestiones relacionadas