Esta es una pregunta discutible ya que no estoy en este proyecto más, pero sigue molestando. Me pregunto si alguien tiene una mejor idea para referencias futuras y buenas prácticas generales de programación.Seguridad no basada en roles?
El enfoque del libro de texto para la seguridad es la "seguridad basada en roles". Cada pantalla, informe u otra tarea está asociada a uno o más roles; cada usuario está asignado a uno o más roles; y luego cada usuario puede ejercitar las pantallas, etc. que coinciden con sus roles y nada más. ¿Derecha?
Hace algunos años dirigí un equipo que desarrolló un sistema para administrar manuales técnicos militares. Cada manual tenía un "administrador de contenido técnico", la persona responsable de escribirlo o editarlo; un "gerente de stock", responsable de llevar un registro de las copias y enviarlas; y un "gerente administrativo", responsable del presupuesto y que, por lo tanto, decidió con qué frecuencia se revisaría el libro, cuántas copias se imprimirían, y así sucesivamente. Por supuesto, cada libro tenía un grupo de personas que ordenarían copias y las leerían. (Como este era el ejército, tenía que estar autorizado para tener en sus manos un libro, autorizaciones de seguridad y todo eso.) Normalmente no nos preocupamos por los lectores reales, sino más bien por las personas en cada base que administraban las bibliotecas , pero eso no es realmente relevante aquí.
Entonces ... estos son "roles" obvios, pero un rol estaba ligado a un libro en particular. Una persona podría ser el administrador de contenido técnico para el libro A, el administrador administrativo del libro B y un lector de otros 50 libros. Entonces, realmente no podríamos decir que un usuario tenía "un rol". Cada usuario tenía roles diferentes para cada libro.
Además de esto había más privilegios de rutina a nivel de sistema: Tuvimos un par de administradores de sistemas autorizado para actualizar nada en el systeem, las personas de mesa de ayuda que podían ver casi cualquier dato pero no actualizar, etc.
Terminé creando una base de datos como esta. (Para evitar entrar en algunos de nuestra terminología extraña que voy a cambiar algunos nombres de campo y de mesa aquí, la idea es la misma.)
Persona (person_id, nombre, etc.)
Technical_Manual (manual_id, título, admin_manager_person_id, stock_manager_person_id, content_manager_person_id, etc)
Authorized_Reader (manual_id, person_id, etc)
usuario (user_id, admin_role, etc)
yo no estaba muy contento con este esquema, ya que significaba que la seguridad se dividía en tres tablas: la tabla technical_manual, la tabla authorized_reader y la tabla de usuarios. Pero ... ¿había una manera más limpia de haberlo hecho? Alguna mejor idea?
Esta es probablemente la forma más simple de tomar este tipo de seguridad. Es fácil de seguir y permite que una persona tenga diferentes roles para diferentes libros o múltiples roles para el mismo libro. – David
Hmm, esto tiene potencial. No tengo espacio para mi comentario como comentario, vea debajo como una nueva publicación. – Jay