sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo codificar y almacenar restricciones de permisos dinámicos?

Bueno, esta es una de las áreas que aún provocan una gran discusión. Como dicen algunos [¿quién? - creo que fue Atwood entre otras personas, pero se me escapa un enlace], ya se ha hecho una aplicación que puede hacer de todo; se llama C. Lo que quiere hacer bordea bastante el área 'demasiado generalizada', aunque puedo ver el valor de no necesitar un programador cada vez que cambia una regla comercial.

Si tuviera que implementar dicho sistema, supongo que intentaría dividirlo en dominios. Ya ha hecho un trabajo relativamente bueno con la segunda mesa. Simplemente normalice eso en dominios separados que se usan para combinar reglas comerciales. Usted crea una regla de negocios que se compone de 1 o muchas restricciones con OR juntas. Cada restricción necesita una propiedad que está restringida con un operador contra un término. Los términos pueden ser complicados, ya que pueden ser cualquier cosa, desde una propiedad hasta una función o una función compuesta. Probablemente sea más fácil verificar las reglas de su negocio para ver lo que necesita. Comience con, digamos, propiedades, booleanos y cosas comunes como 'AHORA'.

Entonces, el esquema en sí mismo, por ejemplo, estaría compuesto por las rules , que contienen múltiples constraints (El beneficio obvio es que puede vincularlos a cualquier [grupo de usuarios/oferta/período de tiempo/otro dominio] que desee). Estos están, a su vez, compuestos por properties , que se compararía con uno de los operators (tabla de referencia principalmente para que pueda ingresar nombres descriptivos personalizados para no programadores, pero puede optar por ingresar funciones personalizadas en algún momento) y, por supuesto, uno de los terms . La última parte es la más compleja, por lo que probablemente deba calificarla con una ID en term_types para que sepa si está comparando con otra propiedad o una función. También puede simplemente VARCHAR y cree el campo con PHP, lo que no debería ser demasiado difícil, dado que tiene todas las opciones en properties y/o functions .

Es un sistema muy abierto (y probablemente haya mejores formas de hacerlo), por lo que probablemente no valga la pena hacerlo a menos que sepa que necesitará un alto grado de dinamismo en las reglas comerciales.