Avatar billede lsskaarup Nybegynder
29. januar 2005 - 17:33 Der er 19 kommentarer og
1 løsning

Brugerdifferenceret login - best practic

Jeg skal have lavet et brugerdifferenceret login til et sitet. Meningen er at administratoren skal have adgang til hele systemet, og de forskellige brugertyper, skal så kun se det som vedrører dem.

Men hvordan skal dette gøres mest korrekt?

Skal jeg i DB'en ligger et felt indeholdende f.eks. 1, 2, 3..., hvor de forskellige tal, er symboler for den enkelte brugertype?

Eller skal jeg gøre det via session, som jeg i forvejen har implementeret i det nuværende login (kun én bruger), og hvordan skal dette så gøre?

Eller en helt tredje måde måske?
Avatar billede detox Nybegynder
29. januar 2005 - 17:35 #1
Jeg synes du skal kombinere de to muligheder du har skitseret. Altså have oplysninger for hver enkelt bruger liggende i databasen og så ligge dem i en session til brug på de forskellige sider.
Avatar billede lsskaarup Nybegynder
29. januar 2005 - 17:42 #2
Jamen jeg er ikke helt med på den praktiske udformning.
Avatar billede detox Nybegynder
29. januar 2005 - 17:46 #3
Hvad er du i tvivl om?
Avatar billede lsskaarup Nybegynder
29. januar 2005 - 17:55 #4
Bl.a. brugeroplysningerne, skal jeg på hver tabel lave et felt som indeholder brugertype, henunder brugertabel, og så sammenlignede dem, og hvordan kobler jeg det sammen med session?

Lige nu sætte jeg bare en bruger-sessionvariabel, og tjekker så på admin-siderne om denne er sat.
Avatar billede detox Nybegynder
29. januar 2005 - 18:34 #5
Du har vel kun en tabel med brugeroplysninger. Der kan du tilføje feltet status med de forskellige levels af rettigheder. Den ligger du så i en session variabel ligesom brugernavnet.
Avatar billede lsskaarup Nybegynder
29. januar 2005 - 22:04 #6
Og så lave en masse i sætninger, for hver brugertype?
Avatar billede lsskaarup Nybegynder
29. januar 2005 - 22:17 #7
hov, i sætninger = if-sætninger
Avatar billede detox Nybegynder
30. januar 2005 - 17:54 #8
Ja, i hvert fald en if sætning, hvor du tjekker at brugeren har som minimum den ønskede status.
Avatar billede lsskaarup Nybegynder
30. januar 2005 - 20:00 #9
Jeg har iløbet af dagen rundet med det, og har faktisk også fået det til at virke, men jeg vil godt lige have tjekket om det er den "korrekte" måde at gøre det på.

Først tjekker jeg om session-variablen bruger er sat, ellers får de ikke lov til at komme ind på siden.

Derefter laver jeg alle de forskellige if-sætninger ved menupunkterne. Så de forskellige typer kun kan se, de menupunkter som de må.

Er det godt nok, eller kan det gøres smartere. Nu har jeg godt nok kun 2 brugertyper pt, men hvis der skulle bliver mange forskellige, og de skal kunne se forskellige punkter, så tror jeg menu-koden bliver noget indviklet, eller hva'?
Avatar billede detox Nybegynder
30. januar 2005 - 20:28 #10
Nu ved jeg ikke hvor mange menuer det drejer sig om, men hvis du har mange kan det måske betale sig at ligge dem i databasen og give dem en status der.
Hvis du fx bruger et felt af typen SET, kan du hente nøjagtigt de menuer der passer til brugerens status. Her er et eksempel der viser hvad jeg mener:

<?php
$arr = array(1,2,4,8);
$status = 11; // 1+2+8
foreach ($arr as $val) {
    if ($val&$status) echo "$val<br />";
}
?>
Avatar billede detox Nybegynder
30. januar 2005 - 20:30 #11
En forespørgsel vil så se sådan ud:

SELECT menu, url FROM `menu_tabel` WHERE status & $status
Avatar billede lsskaarup Nybegynder
30. januar 2005 - 22:27 #12
Din php-kode forstår jeg ikke lige, og forespørgelsen skulle den ikke have været: SELECT menu, url FROM `menu_tabel` WHERE status = $status?
Avatar billede detox Nybegynder
30. januar 2005 - 22:59 #13
Det er sådan med et felt af typen SET, har de enkelte værdier osse en binær værdi. Så hvis du fx har 4 mulige input i SET feltet, får de binær værdierne 1,2,4,8.
Så forespørgslen er korrekt med: status & $status. Spørgsmålet er om det vil være overkill at gøre det på den måde?
Avatar billede lsskaarup Nybegynder
31. januar 2005 - 08:44 #14
Okay, så er jeg slet ikke med på hvad du mener, jeg skal gøre. Kun er der vel skal være en binærværdi i SET til hver brugertype, ikke?
Avatar billede detox Nybegynder
31. januar 2005 - 19:26 #15
Ja, det var mere en ide hvis dit menu/bruger system er meget omfattende. Ellers lav det på en enklere måde. Hvis du kan dele menuerne op i blokke, bliver det jo kun en if sætning til hver brugertype.
Avatar billede lsskaarup Nybegynder
31. januar 2005 - 21:31 #16
Selvfølgelig og det har jeg faktisk også gjort, det var så heldigt at de faktisk lå i blokke i forvejen...

Men på et andet sitet, jeg er ved at lave kommer jeg op på minimum 20 brugertype, så der ville det jo være bedst at gøre det korrekt. Derfor kunne jeg godt tænke mig, at få løst problemet, men jeg må indrømme, at jeg godt nok er rundt på gulvet lige nu.
Avatar billede detox Nybegynder
01. februar 2005 - 00:33 #17
Det letteste, og alligevel effektivte, vil nok være at tildele hver bruger en status. Ligeledes en status til hver af menuerne. Så kan du udtrække de relevante menuer med en if sætning:

SELECT * FROM menuer WHERE status<=$status
Avatar billede lsskaarup Nybegynder
01. februar 2005 - 13:13 #18
Nå okay, så hver "gruppe" i menuen vil få en status, som jeg så kan sammenligne med i brugertabellen. Hermed mener jeg at 2 forskellige menuer godt kan have den samme status overført til brugertypen.
Avatar billede lsskaarup Nybegynder
16. februar 2005 - 08:10 #19
Jeg har ikke haft tid til at få det til at virke perfekt endnu, men tro nok jeg har en ide om hvordan det skal gøres. Tak for hjælpen, detox, ligger du et svar?
Avatar billede detox Nybegynder
16. februar 2005 - 09:47 #20
Velbekommen
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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