2009-02-13 15 views
6

He estado pensando en la aplicación web que estoy a punto de comenzar a desarrollar y me pregunto si mi enfoque habitual podría mejorarse.¿Cómo debo implementar mi ACL en una aplicación web?

En mis últimas aplicaciones he creado una tabla (ver a continuación) de roles (como CREATE POST, EDIT POST etc.) que tienen un campo de bits aplicado a cada uno de ellos, así que puedo asignarle ciertos derechos de registro y verifíquelos más adelante (p. ej., $user->hasRight(CREATE_POST)).

Me pregunto si hay un mejor enfoque para esto. Ciertamente es confuso cuando los derechos no están específicamente vinculados al usuario (podría tener una tabla donde cada derecho es una columna booleana, pero eso solo suena como una pequeña mejora), y ¿qué sucede si cambio algo?

No busco utilizar bibliotecas estándar (la aplicación en sí misma es una experiencia de aprendizaje para mí: uso de postgresql, git, etc.) aunque estoy muy feliz de inspirarme en ellas para construir la mía, así que si hay algo especial que crees que debería echarle un vistazo por favor dímelo :)

+0

Además: será para una aplicación de PHP, pero si hay una gran práctica en, digamos, Ruby on Rails, estoy seguro de que puedo resolverlo :) – Ross

Respuesta

4

Eso es básicamente el mismo enfoque que tomo en mis propias aplicaciones web (y un poco de prueba y error se ha metido en eso para mí). La única diferencia es que probablemente use una tabla que tenga los diferentes permisos como columnas, de modo que si desea agregar más permisos más adelante, puede hacerlo. Usar bits en un entero te limita a un número fijo de permisos, es decir, tantos bits como hay en el entero. Normalmente, eso sería 32, lo que supongo que probablemente sea suficiente, pero prefiero no limitarme de esa manera.

Por lo que vale la pena, que es también el modelo que utiliza phpBB (permisos como columnas de la tabla), y si es lo suficientemente bueno para posiblemente el más popular aplicación web PHP, que es probablemente lo suficientemente bueno para ti ;-)

+1

Me gusta la idea de usar la tabla para ACL. Creo que me puede aconsejar sobre cómo diseñar esta forma correcta de lograr ACL. Así que tengo la tabla 'Proyecto' que tiene una relación de uno a muchos con' Drawing', y una tabla USER. Digamos que tenemos los proyectos 'A' y' B', que tienen muchos dibujos en él.¿Cómo puedo diseñar para que pueda permitir que 1 usuario vea solo A, un usuario para ver solo B y 1 usuario pueda ver ambos? –

1

Estoy seguro de que ya has encontrado phpgacl, pero aquí hay un enlace en caso de que no lo hayas hecho. Puede ser un poco difícil al principio entenderse, y sin duda la biblioteca es complicada (lleva mucho tiempo) para implementar en un proyecto, pero la documentación y la demostración son puntos de referencia EXCELENTES.

PHP Generic Access Control Lists

+0

No lo había hecho, pero ciertamente parece interesante. – Ross

4

Se puede echar un vistazo a la documentación de la primavera de Seguridad (antes Acegi), que es un marco de Java ACL ampliamente utilizado.

La documentación es exhaustiva y también describe las diversas consideraciones hechas en el diseño de autenticación y autorización de bots. Incluso sin usar Java, es digno de leer.

Puede ver el index page para obtener una visión general y una impresión de lo que Acegi hace (y no hace). También puede saltear directamente al authorization concepts o incluso al database schema.

+0

El diseño del sitio para Spring Security ha cambiado así que aquí está la lista de enlaces actualizados: [página de índice] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity.html) , [Conceptos de ACL] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html) y [schema] (http://static.springsource.org /spring-security/site/docs/3.1.x/reference/appendix-schema.html) –

1

Enfoques de ACL en aplicaciones web, en general, se han discutido, por ejemplo here.

+0

Por favor, evite las respuestas de solo enlaces. Si el enlace se rompe, la respuesta se vuelve inutilizable. –

Cuestiones relacionadas