Avatar billede The Real Yoda Juniormester
09. november 2012 - 20:04 Der er 1 kommentar og
1 løsning

Nedarvede rettigheder mysql

Hej Eksperter

Har en lidt svær nød, da jeg har en funktion som jeg gerne vil have lagt ned i stored procedure, for at spare en milliarder af sql kald fra min kode.

jeg har en databasestruktur hvor de vigtige detaljer er:

id (autonummering)
titel
beskrivelse
Rettigheder_slet (hvad niveau skal man være for at måtte Slette)
Rettigheder_Se  (hvad niveau skal man være for at måtte se)
overliggende_id  (peger på overliggende id)

niveau er bruger niveau som kan være 1-4 ..
jeg har så brug for at lave en stored, som kan slå op hvis den får et ID og et brugerniveau, om det niveau har rettighed til et se dette item..

et niveau kan også være 0 .. hvis den arver rettigheder fra overliggende_id ..

eks.

kunne tre poster være:
id navn  beskrivelse      ret_slet  ret_se  over_id
1  test  testbeskrivelse  1          3      0
2  test2  testbeskrvielse  0          0      1
3  test3  testbeskrvielse  0          2      2

det der tænkes her er at post id 3 kan ses af brugere på niveau 1 eller 2 .. og slettes af brugere på niveau 1 (nedarvet fra post 2 som nedarver fra post 1)

post nummer 2 kan ses af niveau 1, 2 og 3 (da den arver fra post 1 som kan ses af niveau 1, 2 og 3)

Ved ikke om det giver mening?

idag læser jeg den aktuelle post, og så kigger på den, og hvis der er et 0 læser jeg den foregående, og det blier jeg så ved med til jeg faktisk fanger et tal..
herefter skal jeg kigger jeg så på tallet og sammenligner med om den aktuelle brugers niveau er lig med eller højere end det tal der blev fundet..

Det er som sådan ikke noget problem, andet end at der godt kan være eks. 50 punkter i første niveau, altså 0 i overliggende..
og så kan der for hver af dem være 50 punkter som nedarver.. og 50 under dem .. osv ..
og når jeg så er nede og skal vise punkter dernede i niveau 8 .. så kan det være ret så mange sql kald der fyres af ..

har visse steder hvor jeg er oppe og sende over flere hundre kald afsted for at checke et punkt.. og så kan der være mange hundrede punkter der skal checkes på en gang.. og med latency til db osv, så er jeg sommetider oppe på nogle lange tider..

kort fortalt kunne jeg godt tænke mig at lave hele det her loopen igennem på db niveau og vil derfor gerne ha det som stored procedure..

Er der nogen forslag ?
Avatar billede erikjacobsen Ekspert
09. november 2012 - 20:34 #1
Det lyder ikke sundt, heller ikke med en stored procedure. Jeg skal så indrømme, at jeg ikke forstår din beskrivelse af rettighederne.

Hvad om du kunne slippe for at lave de 100+ kald, hver gang du skal kontrollere en rettighed? En helt gratis idé: Beregn på forhånd alle rettigheder ud fra den viste tabel, og smid dem i en ny tabel. Skidt med at den bliver stor - databaser er bedre til håndtering af store tabeller, end at håndtere mange forespørgsler.

(Eventuelt kig efter en for-beregnet rettighed - og hvis den ikke er der, så regn de ud, og smid den i for-beregnet tabellen)
Avatar billede The Real Yoda Juniormester
31. januar 2013 - 09:50 #2
Sådan gør jeg faktisk allerede.
og det hjalp også noget.

Men så lukker jeg .. siden du ik samler point, så...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester