Estou tentando encontrar a melhor maneira de um sistema de segurança básico para um site. Eu sei que quero usuários e grupos.
Eu pensei 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?
database-design
johnny
fonte
fonte
GROUP_TYPE
tabela deve ter um nomeGROUP
ou algo semelhante eGROUP_TABLE
deve referenciar usuários e grupos, pois é isso que está vinculando.SELECT
e um campoFROM
para ter uma consulta comoSELECT [FROM] FROM [SELECT]
Respostas:
A maneira tradicional de modelar isso é usar um padrão chamado Segurança Baseada em Função .
A idéia 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 têm 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 orientar quem pode fazer o quê, mas também o que eles podem fazer, se você me seguir.
fonte
ROLE
tabela pode ser subtipada nos tipos Individual e Grupo , onde o tipo de grupo tem zero a muitos membros e o tipo individual tem exatamente um membro. Como você impõe essas regras de cardinalidade é com você. Isso pode ser feito declarativamente no esquema do banco de dados; nesse caso, você precisa alterar um pouco o esquema representado. Ou você pode usar a lógica do aplicativo. Nesse caso, seu esquema ainda se parece com o que eu imaginei acima.