Szoros csatolás kód és adat között
Egy ideje már van egy zsigeri rossz érzésem azzal kapcsolatban, ha kitüntetett adatok vannak az adatbázisban, amelyeknek speciális jelentésük van a kódban. Talán a leggyakoribb ilyen dolog, amikor beleégetik a felhasználói csoportok azonosítóját a kódba, aztán egy init script a rendszer fellövésekor feltölti az adatbázist ezekkel a csoportokkal a megadott id-kkel. Ebben az esetben a csoport id megváltozása az adatbázisban komoly következményekkel járna jogosultság ellenőrzés szempontjából, és elsőre nem feltétlen lenne nyilvánvaló, hogy hol kell keresni a hiba okát. Létezik erre a problémára bármiféle best practice, áttervezés, ami esetleg lazítana a csatoláson?
■
A mostani esetem egyébként
Ami nekem kimondottan zavaró, hogy előre meg kell szabni egy-egy dolog id-jét az adatbázisban, amikor legtöbbször azt egy generátor hozza létre, és semmi köze nincs hozzá a kódnak, hogy mi legyen. Jobb szeretnék valami olyan rendszert, amiben először berakom az adatot az adatbázisba, aztán kötöm valamilyen konfig fájlhoz a generált id-t, amit esetleg később akár meg is változtathatok, ha okom van rá, anélkül hogy bele kéne túrnom a kódba hozzá.
Igen
De egyebkent azzal sincs semmi baj sztem ha az alkalmazas minden deploykor megnezi hogy a megfelelo jogosultsagok adatmezoi leteznek-e a DB-ben es ha nem, letrehozza oket, szal nem kell feltetlen oszlopokkent hozzaadni oket.
Van egyébként ennek a tünet
szerk:
Találtam egy jó topicot a témában: link. Data and code separation-nek hívják.
Az is kiderült miért jön zsigerből, hogyha sérül, akkor valami baj van:
Ehhez még kapásból hozzá lehet tenni, hogyha valami változik, akkor bele kell nyúlni a kódba, és ott átírni az id-ket, vagy ha többféle változat létezik az adadtstruktúrából, akkor folyamatosan bővíteni kell a kódot, amikor hozzáadunk egy új változatot (pl amikor egy új nyelvet adunk hozzá a nyelvek listájához), és így tovább. Nyilván ezért akar bizonyos adatokat az ember adatbázisban vagy config fájlban tárolni a kód helyett.
Szvsz teljesen automatikus init script helyett valamilyen félautomatikus megoldás kellene, esetleg más elveken felépülő. pl a jogosultságnál az init script csinálhatna valami ilyesmit:
Azt hiszem ezzel meg is válaszoltam a kérdésem, lehetséges a laza csatolás elérése megfelelő init scripttel.
Messze
a) azon adatokat soha ne akarja senki kezzel modositani. Tehat pl. az, hogy milyen csoportok vanank nem jo megoldas. Az viszont hogy milyen elemi permissionok vannak a rendszerben, az egy olyan dolog amihez kodmodositas kell.
b) a rendszer tartsa karban automatikusan az adatokat deploykor. Ne kelljen kezzel buheralni.
Es akkor mindjart nincs problema.
Én azt szoktam csinálni, hogy
Adatbázisban user role-okat definiálok. Minden role-hoz tartozik több permission, illetve minden userhez kapcsolódhat több role is. Előfordulhat, hogy egy user egy permissiont többször is megkap ez által, de ez nem probléma, mert unioban érkezik az adat.
Ezzel elértem azt, hogy adatbázis szinten osztok ki jogokat. Lekérem a felhasználóhoz tartozó roleokat, majd ez alapján az összes permissiont. Így kaptam egy felhasználóhoz rendelt permission listát. Ha egy funkciót el akar érni a user, ami csak egy bizonyos permission megléte mellett elérhető, akkor megvizsgálom, hogy hozzá van-e rendelve az a bizonyos permission, és ha ign, akkor tovább engedem, ha nem, akkor lekezelem megfelelő módon.
Ez kb ugyanaz, amit te csinálsz, viszont fordítva:
- a te esetedben az alkalmazás függ az adatbázistól
- az én esetben az adatbázis függ az alkalmazástól
Nekem ez a módszer bevált már sokszor, megspóroltam vele azt a szívást, amitől te is tartasz.
Amit leírtál az a klasszikus