Estou tentando encontrar a melhor maneira de um sistema básico de segurança para um site. Eu sei que quero usuários e grupos.
Achei que teria:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
O primeiro é o usuário, o segundo é o grupo e o terceiro é a tabela intermediária que conecta os dois. Um usuário tem muitos grupos.
Isso soa bem?
A maneira tradicional de modelar isso é usando um padrão chamado Role-Based Security .
A ideia não é apenas ter grupos de usuários, mas também grupos de permissões. Aqui está como o padrão se parece:
Observe que você deseja evitar palavras reservadas para nomes de tabelas, portanto, não nomeie suas tabelas exatamente como mostrado no diagrama.
A maneira como funciona é que seus grupos ou Funções tenham não apenas uma lista de usuários atribuídos a eles, mas também uma lista de permissões atribuídas a eles. Isso permite que você saiba quem pode fazer o quê, mas também o que eles podem fazer, se você me seguir.