12. januar 2010 - 20:42Der er
21 kommentarer og 1 løsning
Svendeprøve! Søg og slet fra mssql_fetch_array ??
Hey,
Sidder her og skriver svendeprøve, og sidder fast i noget jeg virkeligt ikke ved hvordan jeg skal løse..
Det kræver lidt af en intro, så hold lige fast en gang! _____________________________________
Jeg koder et sags stystem og på sagerne har jeg et rettigheds felt som indeholder brugere/grupper tilladt adgang til de enkle sager - adskilt af komma (f.eks. Gruppe1,Gruppe2,Bruger1).
Så, nu vil jeg gerne lave en tabel som viser de sager og KUN de sager som den bruger der er logget ind har lov at se.
Nu er bruger1, som ligger i gruppe1, logget ind, og det her er sagerne der er oprettet:
Nu vil jeg så gerne have at bruger1 KUN får vist den første sag. ______________________________________
Min første tanke er at hente alle sager ind i et mssql_fetch_array og så søge tilgængeligfor feltet igennem for steder hvor Bruger1 eller Gruppe1 IKKE optræder - og så slette den linje fra mssql_fetch_array'et.
Men en ting er at tænke det, en anden er at kode det - er helt blank lige nu.. :S
Det lyder til at være et dårligt database design. Det er ufleksibelt og besværligt at anvende praktisk.
Du bør overvejer at dele det op i flere tabeller og anvende mere komplicerede SQL statements for at opnå en bedre fleksibilitet - så vil du også undgå at skulle hente mere data ud end du skal anvende.
Lav en overordnet sagstabel. Disse skal naturligvis have unikke ID'er (sagsakter, numre, hvad du nu vil have).
Derefter laver du en tabel der kan kæde dine sager op mod de forskellige brugergrupper (her antages det at du allerede har noget der kæder en bruger op mod en gruppe?)
Sidst, så laver en en tabel der kan give den enkelte bruger adgang til en specifik sag.
Nu har jeg aldrig nogensinde brugt en mssql database, men den fungere vel lidt på samme måde som en mysql database. (Det er jo stadig samme måde det skal kodes sammen på).
Users tabel: - ID - Username - Password osv osv.
Sags tabel: - ID - Beskrivelse - Adgang (Eller hvad du syntes den skal hedde). (Denne lister grupper/personer som må se sagen adskilt med komma). osv osv.
Gruppe tabel: - ID - Gruppenavn - Personer (Denne lister personer som er tilmeldt gruppen, adskilt med komma). osv osv.
Det er den måde jeg ville vælge at sætte min database op på, dette kan selfølgelig gøres på mange forskellige måder og faconer. Det er op til en selv.
Jeg håber du kunne bruge det, ellers må du enlig sige til.
Det database setup vil du aldrig kunne få til at fungere uden at få skrevet noget slamkode og det vil blive et helvede for dig at vedligeholde dine SQL forespørgsler.
Dit tabel setup bør afspejle noget ala:
users: userId, uUsername, uPassword
userGroups: groupId, gName
usersInGroups: userId, groupid
cases: caseId cName, cContent
casesInGroups: caseId, groupId
casesInUsers: caseId, userId
På den måde kan du let med nogle SQL forespørgsler få linket sager, brugere og brugergrupperne sammen hurtigt og effektivt - endda med pænt kode og kode som er nem at refaktorere og strukturere. Pæn og overskuelig kode er vejen til success.
Hej igen, Fik lige et lille 'melt-down' igår. Tog ud forbi min bror som er begyndt på ITU, og skræmmende nok, så har han på et ½ år lært mere om database design - end jeg har på 4 år som datatekniker.
Hurtigt spørgsmål - har ikke arbejdet meget med FK(pinligt) så skal lige være med her, når jeg vil give en gruppe adgang til en case - hvordan gør jeg så det? min "Right" tabel har jo kun FK'er.
Det er et fint udgangspunkt - det ser dog ikke ud til at der er taget højde for at en enkelt bruger kan få adgang til en case uden at være medlem af en gruppe som ellers normalt ville have adgang til en case. Men det ved jeg ikke om er et problem.
Har du ikke - med din bror - gennemgået tabeldesignet, således du fik forståelse for det design der er lagt op til?
Vi (brormand og jeg) blev enige om at lave det så man kun giver grupper adgang til sager i første omgang, for at holde det relativt simpelt.
Vi sluttede af kl 02 i nat, forstod det hele - var først her til morgen da jeg skulle lave scriptet der opretter databasen at jeg lige kom til at tænke på det.
Når jeg skal give gruppen 'g_Id=1' adgang til sagen'c_id=3' skriver jeg bare følgende ned i doc_Right g_Id = 1 c_Id = 3
Så burde det spille, hvis jeg har forstået konceptet rigtigt
Ja, jamen, så har du forstået det rigtigt.... doc_RuleForGroup skulle gerne afspejle den adgang som den enkelte gruppe har til den enkelte case. For hver case en gruppe har adgang til, skal der optræde en linie i den tabel.
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.