Estoy tratando de encontrar la mejor manera para un sistema de seguridad básico para un sitio web. Sé que quiero usuarios y grupos.
Pensé que tendría:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
El primero es el usuario, el segundo es el grupo y el tercero es la tabla intermedia que conecta a los dos. Un usuario tiene muchos grupos.
¿Esto suena bien?
database-design
johnny
fuente
fuente
GROUP_TYPE
tabla debe tener un nombreGROUP
o algo similar, yGROUP_TABLE
debe hacer referencia tanto a Usuarios como a Grupos, ya que eso es lo que está vinculando.SELECT
y un campoFROM
para que pueda tener una consulta comoSELECT [FROM] FROM [SELECT]
Respuestas:
La forma tradicional de modelar esto es usando un patrón llamado Seguridad basada en roles .
La idea no es solo tener grupos de usuarios, sino también grupos de permisos. Así es como se ve el patrón:
Tenga en cuenta que desea evitar las palabras reservadas para los nombres de las tablas, por lo que no debe nombrar sus tablas exactamente como se muestra en el diagrama.
La forma en que funciona es que sus grupos o roles tienen no solo una lista de usuarios asignados a ellos sino también una lista de permisos asignados a ellos. Esto le permite conducir en la mesa tanto quién puede hacer qué, como también qué pueden hacer si me siguen.
fuente
ROLE
tabla se puede subtipar en tipos individuales y grupales , donde el tipo de grupo tiene cero a muchos miembros y el tipo individual tiene exactamente un miembro. La forma en que aplica estas reglas de cardinalidad depende de usted. Podría hacerse declarativamente en el esquema de su base de datos, en cuyo caso debe cambiar ligeramente el esquema ilustrado. O puede usar la lógica de la aplicación, en cuyo caso su esquema todavía se parece a lo que he ilustrado anteriormente.