Pregunta

¿Cuál es el mejor esquema de base de datos para el seguimiento de rol basado en los controles de acceso para una aplicación web?

Estoy usando Rails, pero la configuración de RBAC plugin vinculado por Google se ve sin mantenimiento (sólo 300 se compromete a SVN;más reciente fue hace casi un año).

El concepto es bastante simple de implementar desde cero, sin embargo, complejo y tan importante que vale la pena ponerse a la derecha.

Entonces, ¿cómo los demás arquitecto e implementar su modelo RBAC?

¿Fue útil?

Solución

A mi en lugar de conocimientos básicos en el área básica de los actores de un RBAC son:

  • Recursos.
  • Los permisos.
  • Los usuarios.
  • Funciones (es decir,Los grupos).

Recursos <- requieren -> (uno o muchos) Permisos.

Funciones <- son colecciones de -> (uno o muchos) Permisos.

Los usuarios <- puede tener -> (uno o muchos) Funciones.

Las tablas de un modelo que sería:

  • permiso
  • papel
  • usuario
  • role_permission
  • función_usuario

Ahora es posible que desee incluir recursos aquí si desea que los usuarios de su aplicación para poder configurar los permisos de un recurso necesario.Pero nunca me necesitaba.Espero que ayude.

Otros consejos

Aquí está un diagrama para ilustrar Amr Mostafa excelente respuesta

enter image description here

Resulta que estoy trabajando en la configuración de RBAC sub-sistema aquí en el trabajo en ellos de momento...qué casualidad.

Mi modelo se basa en los bloques de construcción de los diferentes las entidades en el sistema que requieren permisos, se les atribuye a ver/actualizar o acciones a realizar.También hay, por supuesto, las diferentes funciones en el sistema (que se puede dar a los usuarios), y el pegamento que mantiene todo el conjunto es el regla de acceso, que conecta una función específica, un permiso específico que necesitan la entidad y el permiso concedido.Una regla de acceso podría ser como estas:

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

y así sucesivamente.Voy a dejar el ERD como ejercicio para el lector ;-) si tiene alguna pregunta, deja un comentario.

Yuval =8-)

Creo que la respuesta a tu pregunta no es tan profunda como la que usted desea ir.Si le sucede a pensar en poner los papeles en grupos y, a continuación, asociar a los grupos con los usuarios no es suficiente.Eventualmente tendrás que dar permisos específicos para un usuario en un objeto específico (un foro, un video, etc).

Estoy más cerca de Yuval la respuesta, todo lo que necesitamos es asociar proyecto-amplia objetos + acciones + usuarios.Para proporcionar este;una base de objeto (Entidad) tiene perfecto sentido.Cualquier objeto que hereda de la Entidad puede ser fácilmente asociados con un usuario + acción de esta manera.

Como usted también desea mantener las cosas simples;mi sugerencia sería;

  • Cualquier objeto, debido a las restricciones rbac debe derivar de una base de la Entidad.
  • Debe haber una lista de funciones, que son uno-a-uno relacionado con una Entidad.
  • Debería haber una lista de las relaciones entre los usuarios y roles.

A tomar las cosas un paso más allá, yo también recomiendo el siguiente (para un sistema automatizado de rbac)

  • Yo uso el servicio de acceso basado en mis objetos.Que es;Creo respositories de objetos (que hacen la base de datos-acceso para mí) y me repositorios de acceso a través de las funciones de servicio.
  • Yo uso un atributo personalizado en el comienzo de cada función de servicio.De esta forma se define el rol necesario para acceder a esa función.
  • Yo uso el parámetro de Usuario para acceso a todas las funciones de servicio, y cada función de servicio hace un papel de verificación antes de la ejecución de sí mismo.La reflexión me ayuda a entender que la función que yo llamo, y qué tipo de papel se ha (a través de los atributos personalizados)
  • Yo también ejecutar un inicializador en mi inicio de la aplicación, y se comprueba para todas las funciones (y sus atributos) y ve si he añadido una nueva función requeridos.Si hay un papel que me acaba de agregar y no parecen estar en la base de datos, se crea en db.

Pero, por desgracia, eso es solo disponible para .NET, que yo sepa Java no tiene atributos personalizados por lo que aún no es probable que esté disponible para Java.

Me gustaría venir para arriba con algunos ejemplos de código, pero soy demasiado perezoso para hacerlo.Aún si usted tiene preguntas acerca de mi manera de rbac;usted puede pedir aquí y yo seguramente va a responder.

Papel Requisito funciona con Restful Authentication muy bien para proveer de rol basado en la autenticación de funciones y está bien mantenido.

Para .net applications usted debe mirar algo como Visual Guard http://www.visual-guard.com/ para evitar tener que manejar permisos y roles a partir de cero.

También para .net, usted tiene la pertenencia y el papel de los proveedores y la autorización manejado con la configuración. http://www.odetocode.com/Articles/427.aspx

Trate de https://github.com/ThoughtWorksStudios/piece, es un motor de reglas para administrar la función de usuario control de acceso basado en:

  1. Definir reglas de control de acceso
  2. Combinar reglas para la construcción de nuevas reglas

Usted puede encontrar la plena aplicación Rails ejemplo aquí: https://github.com/xli/piece-blog

Introducción a RBAC -

De acceso basado en funciones de control del sistema es un método de restringir el acceso a algunas fuentes o aplicaciones, o algunas de las características de las aplicaciones', basada en los roles de los usuarios de la organización.

Aquí, las restricciones pueden ser por medio de varios permisos, aquellos que son creados por el administrador para restringir el acceso, y estos permisos colectivamente representa un papel, el cual será asignado al usuario.

Y si vamos más profundo leve en RBAC, básicamente contiene 3 características.

1) Autenticación - Se confirma la identidad del usuario.Generalmente se hace a través de cuentas de usuario y contraseñas o credenciales.

2) Autorización - define lo que el usuario puede hacer y no en una aplicación.Ex.'La modificación de la orden" está permitido, pero 'crear nuevo orden" no está permitido.

3) Auditoría de las acciones de usuario en las aplicaciones.- Realiza un seguimiento de las acciones del usuario en las aplicaciones, así como que ha otorgado a que el acceso a los que los usuarios?

Esto era muy básico, vista superior de la imagen de sistema RBAC.

Estructura básica del sistema RBAC puede contener los siguientes componentes:Usuarios, Roles, Permisos o restricciones de recursos.

  • Los permisos o restricciones de permisos representa un acceso a de recursos de la aplicación.
  • Papel – contiene la colección de permisos
  • El usuario Único o múltiples roles asignados al usuario, por lo que finalmente el usuario contiene los permisos a través de los medios de papel.

Además de esto, usted también puede tener la colección de los usuarios – llamado – de los grupos, y el papel que pueden ser asignados a los grupos, si usted desea apoyar a escenarios complejos.Así, Esta fue la información básica acerca de RBAC estructura.

Me gusta mucho este blog post: https://content.pivotal.io/blog/access-control-permissions-in-rails

EDITAR:

Parece que ryanb de railscasts pensamiento a lo largo de las mismas líneas y creó una gema llamada cancan https://github.com/ryanb/cancan utilizando una técnica similar a la pivotollabs post.

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