2011-01-11 12 views
5

Estoy creando un sistema CMS de fotografía personalizado y necesito implementar un sistema de autenticación y permisos de usuario. ¿Cuáles son las prácticas habituales en la industria para crear dicho esquema?Cómo estructurar los permisos de usuario para un cms

Básicamente, necesito tener usuarios, y los usuarios pueden ser de otro tipo. Algunos usuarios digamos que solo pueden crear galerías, otros solo pueden editarlos, o editar solo ciertas galerías, etc. Entonces, ¿cómo debería estructurarse esto? Estoy usando la base de datos MySQL y estoy usando PHP para codificar el CMS.

Intenté buscar en Google pero solo encontré artículos que explican cómo crear usuarios para la base de datos MySQL real. Apreciaré un enlace a un artículo que explica cómo se debe hacer este tipo de cosas.

Gracias de antemano.

+0

Busque en PEAR Live_User. Es algo viejo y nunca se convirtió en un estándar, pero maneja la mayoría de los permisos de microgestión. – mario

Respuesta

5

Existen dos enfoques comunes para este problema, ambos implican separar las operaciones permitidas en algo discreto que puede nombrar. (Elimine publicaciones, cree galerías, actualice el código, vacíe la base de datos, lance los misiles, abra la puerta del garaje). Dé a cada uno de estos un mapa de bits en un vector de bits (si tiene la intención de tener menos de 32 permisos, este es un buen y mecanismo de almacenamiento compacto; si crees que crecerá más allá de los 32 permisos, el tamaño de un entero típico, luego una tabla en tu base de datos ...)

Así, puedes asignar usuarios a los permisos directamente ("I gallery_create desea conceder a sarnold ") o puede asignar usuarios y permisos a través de clases de usuarios (" deseo conceder gallery_create a todos los miembros de la clase art_curator; a continuación, me gustaría promover usuario sarnold a partir docent a art_curator ").

Si asignas usuarios a los permisos directamente, es posible que encuentres un montón de permisos extraños en la implementación años después. Si asigna usuarios a las clases, puede encontrarse con clases artificiales de usuarios porque confió en una persona específica con un privilegio, pero no otros privilegios.

Averiguar la mejor manera de abordar este mapeo sigue siendo un problema abierto; He escrito sobre diferentes tipos de modelos de permisos Modelling a permissions system que pueden ser demasiados o muy pocos, dependiendo de qué tan complicado le gustaría que fuera su sistema.

Si desea sólo permisos de almacén en mapas de bits (por ejemplo, la implementación del núcleo de Linux de CAPABLE() para CAP_SYS_ADMIN, CAP_DAC_OVERRIDE, y así sucesivamente), entonces usted podría añadir nuevos privilegios con algo muy simple:

if (requested_new_permission == "CAP_SYS_ADMIN") 
    user->permissions |= CAP_SYS_ADMIN; 
else if (requested_new_permissions == "CAP_DAC_OVERRIDE") 
    user->permissions |= CAP_DAC_OVERRIDE; 

...

Entonces, cuando usted necesita para poner a prueba las capacidades de:

if (CAPABLE(user, CAP_SYS_ADMIN)) 
    reboot_server(); 

y la macro CAPABLE() puede verse como:

#define CAPAZ (usuario, cap) ((usuario) -> permisos & (cap))

(valga la C, sólo que no sé bien PHP; Me han obligado a corregir demasiados errores de php para querer aprenderlo por mi cuenta.)

Si desea asignar permisos a los usuarios a través de las clases de usuarios, entonces podría ser tres tablas: una tabla users, una mesa o groupsclasses, y una mesa permissions. classes tiene columnas para user_id y permission_id. Cuando necesite verificar si se puede otorgar un permiso, seleccione la clase del usuario, luego seleccione el permiso en la clase. (También han pasado años desde que escribí SQL a mano, estoy seguro de que una sola consulta puede dar una respuesta afirmativa o negativa, pero no estoy seguro de si se trataría de una combinación de varias tablas o el uso de subconsultas o si sería más fácil hacer dos consultas a la base de datos :)

Espero que esto ayude.

Cuestiones relacionadas