sql >> Databasteknik >  >> RDS >> Mysql

Hur kodifierar och lagrar man dynamiska behörighetsbegränsningar?

Tja, detta är ett av de områden som fortfarande väcker en ganska stor diskussion. Som vissa säger [vem? - tror det var Atwood bland andra människor, men en länk undgår mig], en applikation som kan allt har redan gjorts; det heter C. Det du vill göra gränsar nästan till det "för generaliserade" området, även om jag kan se värdet i att inte behöva en programmerare varje gång en affärsregel ändras.

Om jag skulle behöva implementera ett sådant system, antar jag att jag skulle försöka dela upp det i domäner. Du har gjort ett relativt bra jobb redan med det andra bordet. Normalisera bara det till separata domäner som används för att sammansätta affärsregler. Du skapar en affärsregel som består av 1 eller flera begränsningar OR-ed tillsammans. Varje begränsning behöver en egenskap som är begränsad med en operatör mot en term. Termer kan vara knepiga, eftersom de kan vara allt från en egenskap till en funktion, till en sammansatt funktion. Det är förmodligen enklast att kontrollera dina affärsregler för att se vad du behöver. Börja med, säg, egenskaper, booleans och vanliga saker som "NU".

Så själva schemat skulle till exempel bestå av rules , som innehåller flera constraints (uppenbar fördel är att du kan knyta dessa till vilken [användargrupp/erbjudande/tid/annan domän] du vill). Dessa består i sin tur av properties , vilket skulle jämföras med en av operators (referenstabell mestadels så att du kan ange anpassade beskrivande namn för icke-programmerare, men du kan välja att ange en anpassad funktion i den någon gång) och naturligtvis en av terms . Den sista delen är den mest komplexa, så du måste förmodligen kvalificera den med ett ID i term_types så att du vet om du jämför med en annan fastighet eller en funktion. Du kan också bara VARCHAR det och skapa fältet med PHP, vilket inte borde vara alltför svårt, med tanke på hur du har alla alternativ i properties och/eller functions .

Det är ett väldigt öppet system (och det finns förmodligen bättre sätt att göra det på), så det är förmodligen inte värt att göra om du inte vet att du kommer att behöva en hög grad av dynamik i affärsregler.




  1. 2 sätt att returnera ASCII-koden för en given karaktär i MariaDB

  2. skicka LIMIT som parametrar till MySQL sproc

  3. lägg till en tillfällig kolumn med ett värde

  4. Hämta senaste trådar som användaren inte gick med i