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

Como codificar e armazenar restrições de permissão dinâmicas?


Bem, esta é uma das áreas que ainda suscitam uma grande discussão. Como alguns dizem [quem? - acho que foi Atwood entre outras pessoas, mas um link me escapa], um aplicativo que pode fazer tudo já foi feito; chama-se C. O que você quer fazer beira quase a área 'generalizada demais', embora eu possa ver o valor de não precisar de um programador toda vez que uma regra de negócios muda.

Se eu tivesse que implementar tal sistema, acho que tentaria dividi-lo em domínios. Você já fez um trabalho relativamente bom com a segunda mesa. Apenas normalize isso em domínios separados que são usados ​​para compor regras de negócios. Você cria uma regra de negócios que é composta por 1 ou várias restrições combinadas com OR. Cada restrição precisa de uma propriedade restrita com um operador em relação a um termo. Os termos podem ser complicados, pois podem ser qualquer coisa, desde uma propriedade até uma função, até uma função composta. Provavelmente é mais fácil verificar suas regras de negócios para ver o que você precisa. Comece com, digamos, propriedades, booleanos e coisas comuns como 'AGORA'.

Assim, o próprio esquema seria, por exemplo, composto pelas rules , que contém várias constraints (o benefício óbvio é que você pode vinculá-los a qualquer [grupo de usuários/oferta/intervalo de tempo/outro domínio] que desejar). Estes são, por sua vez, compostos por properties , que seria comparado com um dos operators (tabela de referência principalmente para que você possa inserir nomes descritivos personalizados para não programadores, mas você pode optar por inserir funções personalizadas nela em algum momento) e, é claro, um dos terms . A última parte é a mais complexa, então você provavelmente teria que qualificá-la com um ID em term_types para que você saiba se está comparando com outra propriedade ou função. Você também pode apenas VARCHAR e crie o campo com PHP, o que não deve ser muito difícil, já que você tem todas as opções em properties e/ou functions .

É um sistema muito aberto (e provavelmente há maneiras melhores de fazê-lo), então provavelmente não vale a pena fazê-lo, a menos que você saiba que precisará de um alto grau de dinamismo nas regras de negócios.