Pregunta

¿Alguien conoce algunos buenos recursos relacionados con la configuración de sistemas de cuentas de usuario jerárquicos?Actualmente estoy configurando uno y estoy luchando con algunas de las lógicas más complejas (especialmente con la determinación de permisos).Esperaba poder encontrar algunos recursos que me ayudaran.

Algunos antecedentes:Estoy creando un sistema de cuentas de usuario para un CMS web que permite una jerarquía de grupos anidados.A cada grupo se le puede permitir o denegar acceso para leer, escribir, agregar y eliminar (ya sea explícitamente para ese grupo o implícitamente por uno de sus padres).Como si eso no fuera lo suficientemente complicado, el sistema también permite que los usuarios sean miembros de múltiples grupos.--Aquí es donde estoy estancado.Tengo todo configurado, pero tengo problemas con la lógica real para determinar los permisos para un usuario determinado.

¿Fue útil?

Solución

El manual de CakePHP tiene una excelente descripción de cómo funcionan las Listas de Control de Acceso.

http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

Otros consejos

Representa los permisos establecidos para un grupo determinado como una máscara de bits.La combinación OR de las máscaras de bits le dará el conjunto de permisos resultante.

Actualización para @Alex:

Escribí esta respuesta hace 3 años, pero creo que me refería a lo siguiente...

De la pregunta

una jerarquía de grupos anidados.A cada grupo se le puede permitir/negar acceso a leer, escribir, agregar y eliminar (explícitamente para ese grupo o implícitamente por uno de sus padres).Como si eso no fuera lo suficientemente complicado, el sistema también permite que los usuarios sean miembros de múltiples grupos.--Aquí es donde estoy estancado.Tengo todo configurado, pero estoy luchando con la lógica real para determinar PEMISS para un usuario determinado.

Asigne una máscara de bits que coincida con el conjunto de permisos total de un grupo (o rol) en el sistema:

p.ej. 00 (¡Usar dos bits lo hace simple aquí!)

El primer bit confiere Permission A y el segundo Permission B.

Ahora digamos que el Grupo A confiere el siguiente conjunto de permisos: 01.

...y digamos que el Grupo B confiere el siguiente conjunto de permisos: 10.

Para obtener el conjunto de permisos resultante para un usuario en un conjunto arbitrario de grupos, puede realizar una lógica OR en las máscaras de bits del conjunto de permisos:

Permission set for Group A   01
Permission set for Group B   10 OR 
                             ----
Resultant permission set     11 (i.e. both permission A and B are conferred)

No conozco los detalles del sistema del interrogador, pero el sistema descrito aquí podría ampliarse para lograr diferentes comportamientos de composición de grupo utilizando diferentes operadores lógicos.

Mira los permisos en el Sistema de archivos Andrew.Permite a los usuarios crear y administrar sus propios grupos, mientras asigna selectivamente derechos de administrador y ACL.Es posible que descubra que muchos de los detalles molestos ya están resueltos en su modelo.

Editar: Aquí hay un enlace mejor a la documentación de AFS:

http://www.cs.cmu.edu/~help/afs/index.html

Aquí tenéis el apartado de grupos:

http://www.cs.cmu.edu/~help/afs/afs_groups.html

He hecho exactamente esto antes y no es una implementación trivial.Querrá mirar la clase SecurityPermission.

[http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

He hecho esto antes utilizando XML (lo cual no estoy seguro de volver a hacer) y almacenando ese XML como lista de permisos dentro del servidor SQL en una columna XML a través de un proceso almacenado CLR.El XML tendría un elemento llamado "permiso" y luego el permiso sería en realidad un ENUM dentro del código.Cada permiso era una nueva implementación de la clase SecurityPermission (vinculada arriba). Los usuarios estaban vinculados a grupos que se definían en el servidor SQL y luego, cuando el usuario era agregado o eliminado de los grupos, el documento XML se actualizaba para reflejar de qué grupos estaban separados. de.

Tan pronto como el usuario inicia sesión, las credenciales del usuario se cargarán en la tienda de aplicaciones (sesión) y luego se accederá a ellas en consecuencia.Cuando era necesario realizar la autorización, el XML en la tienda de aplicaciones se cargaba en SecurityPermission mediante el método "FromXML".En ese momento usaría los siguientes métodos para determinar si el usuario tenía permiso:

  • Demanda
  • Intersecarse
  • Unión
  • No tiene restricciones
  • EsSubSetOf

etc., etc., etc.

En ese momento, después de realizar la Demanda, pude determinar si la persona que llama tenía acceso de acuerdo con cómo implementé mis rutinas de seguridad en SecurityPermissions.

Nuevamente, esto omite una TONELADA de detalles, pero debería llevarlo por el camino correcto.

Eche un vistazo también a este espacio de nombres:[2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx "Sistema.Seguridad.Permisos"

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