Como krokodilko escreveu em seu comentário, depende do nível de flexibilidade que você precisa.
Eu implementei permissões baseadas em função para um dos meus clientes da seguinte forma:
- Usuário (ID de usuário (PK), nome de usuário (único), senha (salted e hash! ), nome, sobrenome, telefone etc')
- Função (ID da função (PK), nome da função (único), descrição da função)
- Permissão (ID da permissão (PK), nome da permissão (único)) - as guias/telas/ações vão aqui
- Usuário para função (ID do usuário, ID da função) - PK são as duas colunas combinadas
- Função para permissão (ID da função, ID da permissão) - PK são as duas colunas combinadas
Mas minha exigência era ser o mais flexível possível, e é um sistema que ainda está crescendo (6 anos e contando).
Acho que muitos aplicativos podem fazer com que o usuário funcione como um relacionamento de um para muitos, em vez de muitos para muitos, como no meu caso, mas eu não codificaria permissões ou papéis para permissões em nenhum aplicativo.
Mais explicações:Design de banco de dados de segurança baseado em função em O que o # eu sei?