Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Esquema de banco de dados para RBAC com vários níveis de funções


Minha experiência ao experimentar uma implementação de RBAC personalizada é a seguinte:

  1. Você lê muita literatura do RBAC e acha que entende. Então você vai em frente e tenta implementá-lo, apenas para perceber que você realmente não entendeu nada. Eventualmente, isso fará sentido à medida que você avança no projeto.

  2. Com base na sua pergunta, você já conhece o domínio de negócios ao qual deseja aplicar o RBAC. Mas esqueça os objetos de negócios reais por enquanto. Sua implementação de RBAC deve ser genérica, o que significa que você tem um esquema de banco de dados que consiste em tabelas de função, usuário, permissão, operação etc. Então você terá objetos que mapeiam para tais tabelas (relação um-para-um).

Depois de ter essa implementação do RBAC, ela pode ser modelada para praticamente qualquer domínio de negócios, como um 'Departamento' que você mencionou.

Apenas lembre-se de que nem tudo é perfeito... Eu aprimorei/modifiquei/derivamos da literatura real do RBAC para adicionar recursos personalizados, melhorar o desempenho, etc.

Eu não tenho trabalhado nisso por um tempo, então espero estar correto no seguinte:
  • Usuário:as instâncias são criadas e salvas em sua tabela de apoio.

  • Função:as instâncias são criadas e salvas em sua tabela de apoio. As funções serão atribuídas aos usuários.

  • Permissão:Uma permissão é basicamente uma combinação de uma Operação em um Objeto. As permissões são atribuídas a funções.

  • Operação:Uma operação é simplesmente qualquer coisa que você queira. Pode ser CRUD (criar, ler, atualizar, excluir) ou também pode ser 'imprimir', 'pesquisar' ou qualquer coisa que um humano (ou sistema) possa executar em um objeto (ou grupo de objetos).
  • Objeto:basicamente todos os seus objetos que compõem seu domínio de negócios.

Para obter ainda mais poder, você pode implementar restrições para aplicar uma quantidade enorme de várias restrições.

Com este framework, você deve ser capaz de mapear:
  • Quem pode atribuir usuários a um departamento
  • Quem pode removê-los dos departamentos
  • Quantos usuários podem estar em um departamento
  • Que tipo de usuário (com base nas funções atribuídas) pode estar em um departamento
  • Quais rolagens podem realizar quais operações para um departamento (criar, ler, atualizar, excluir)
  • etc.