Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie codiere und speichere ich dynamische Berechtigungsbeschränkungen?

Nun, dies ist einer der Bereiche, die immer noch ziemlich viel Diskussion hervorrufen. Wie manche sagen[wer? - denke, es war Atwood unter anderem, aber ein Link entgeht mir], eine Anwendung, die alles kann, wurde bereits gemacht; es heißt C. Was Sie tun möchten, grenzt fast an den Bereich "zu allgemein", obwohl ich den Wert darin sehe, nicht jedes Mal einen Programmierer zu benötigen, wenn sich eine Geschäftsregel ändert.

Wenn ich ein solches System implementieren müsste, würde ich wohl versuchen, es in Domänen aufzuteilen. Mit dem zweiten Tisch ist dir das schon relativ gut gelungen. Normalisieren Sie das einfach in separate Domänen, die zum Zusammensetzen von Geschäftsregeln verwendet werden. Sie erstellen eine Geschäftsregel, die aus einer oder mehreren Einschränkungen besteht, die ODER-verknüpft sind. Jede Einschränkung benötigt eine Eigenschaft, die mit einem Operator gegen einen Begriff eingeschränkt wird. Terme können knifflig sein, da sie alles mögliche sein können, von einer Eigenschaft über eine Funktion bis hin zu einer zusammengesetzten Funktion. Es ist wahrscheinlich am einfachsten, Ihre Geschäftsregeln zu überprüfen, um zu sehen, was Sie brauchen. Beginnen Sie beispielsweise mit Eigenschaften, booleschen Werten und alltäglichen Dingen wie „JETZT“.

Das Schema selbst würde also beispielsweise aus den rules bestehen , die mehrere constraints enthalten (Offensichtlicher Vorteil ist, dass Sie diese an jede gewünschte [Benutzergruppe/Angebot/Zeitspanne/andere Domain] binden können). Diese wiederum bestehen aus properties , was mit einem der operators verglichen werden würde (Referenztabelle hauptsächlich, damit Sie benutzerdefinierte beschreibende Namen für Nicht-Programmierer eingeben können, aber Sie können sich irgendwann dafür entscheiden, benutzerdefinierte Funktionen darin einzugeben) und natürlich einen der terms . Der letzte Teil ist der komplexeste, daher müssten Sie ihn wahrscheinlich mit einer ID in term_types qualifizieren damit Sie wissen, ob Sie mit einer anderen Eigenschaft oder einer Funktion vergleichen. Sie können auch einfach VARCHAR verwenden es und erstellen Sie das Feld mit PHP, was nicht allzu schwierig sein sollte, da Sie alle Optionen in properties haben und/oder functions .

Es ist ein sehr offenes System (und es gibt wahrscheinlich bessere Möglichkeiten, es anzugehen), also lohnt es sich wahrscheinlich nicht, es sei denn, Sie wissen, dass Sie ein hohes Maß an Dynamik in Geschäftsregeln benötigen.