Detta kanske inte är rätt forum men här kommer den ändå.
Jag ska bygga ett admininstrations-gränssnitt och skulle behöva lite hjälp. Hade tänkt att göra något i den här stilen:
tbl_admin - innehåller information om administratören....
id|namn|lastlogin|userlevel|etc
i denna tabell har jag något som heter userlevel:
0 - får göra ngt
1 - får göra ngt och lite till
2 - nästan allt
3 - tillgång till allt
osv.
Detta borde ju fungera. Men om jag skulle vilja att administratören ska kunna lägga till egna "levels" hur ska jag göra då? Och för att göra det hela lite mera komplicerat så ska jag ha samma administratörer/system till ett antal applicationer så de ska vara sammanknutna....
Funderade också på något i den här stilen:
id|admin_id|nyhet(tillåtelse att lägga till nyhet, true /false) osv med alla andra saker som ska elelr inte ska ha tillgång till. Men har hört att det inte ska vara så bra...
Jaja vet inte rikigt hur jag ska förklara alla svar är välkommna!
Jag skulle nog försöka göra det roll/grupp baserat där du först anger en grupp som är huvudadmins, sedan kan de då lägga till nya grupper och lägga in folk i de grupperna samt ställa in på de olika sidorna vilken grupp som får göra vad.
Du kan ju skapa generella roller, sedan kan du ju göra möjligheter att sätta grant/deny direkt på användaren också, även om det är väldigt dumt. Även om det bara kommer att finnas en användare i en grupp är det bättre att skapa en grupp för det än att sätta rättigheterna direkt på användaren.
Tänk om administratören dör och en ny användare - med samma behörigheter - skall in, då är det lättare att bara låta användaren vara medlem i en grupp än att dela ut alla rättigheter som är satta genom åren.
Sedan kan du välja olika sätt att koppla användare till rollerna, antingen skapar du en kolumn i tabellen som har hand om användarna, i den kolumnen finns det information om vilka grupper användaren är med i. Tex 1;43;5;6. Sedan gör du bara en string array av dem. Det andra alternativet är att skapa en ny tabell som har hand om kopplingen i mellan user och roles. Den kan se ut så här: usertoroles [userid,roleid].
Roller är helt rätt tänkt som funktion.
En administratör skall ju inte ha hela rättigheten till allt.
Bara de funktioner som han har behöv av.
Tiden dvs datum from datum tom är viktigt.
Jo då kan du delegera rättigheter viss tid.
Exempelvis backuprättigheter för en roll bara under en viss tid.
Kanske inget jättebra exempel men ändå.
Varje användare som tilldelas en eller flera roller skall i allafall ha en begränsad tid (datum) på sig.
Skulle nog bygga med en rolltabell (för alla roller) sedan 2 st "junktabeller" för att koppla samman användare->roll och application->roll. På det viset skapar man en roll för applikationen och sedan lägger man in användaren i den rollen.
Men en liten undring: i den designen är det tillåtet att sätta flera roller till en och samma användare. Bör man göra det (t ex Nisse --> Nyhetsskribent, Administratör)? Eller bör man sätta endast en roll (Nisse --> Admin) och sedan sätta alla rättigheterna för den specifika rollen?
Det finns ju för och nackdelar med båda sakerna, men finns det något "korrekt" sätt?
En användare som blir tilldelade flera roller (t ex Admin, nyhetsskribent) är ju svårt att tyda vad denne är för något. Men om man sätter rättigheterna på rollen (Admin --> Kan göra det och det) så blir det mer rättigheter att ställa in så fort man vill göra en förändring.
Vad är mest rätt (jag tänkte satsa på alternativ ett)?
I LotusNotes jobbar man mycket med roller. Själva rättigheten ligger INTE på användaren UTAN på rollen.
Dvs, i ditt exempel så skulle själva nyhetsapplikationen tex kunna ha dessa roller:
Reader
Editor
Admin
Om nu Nisse behöver admin rättigheter så läggs han där.
Admin ska ju kunna göra "allt". Behöver således inte Nisse vara admin utan endast Skribent (Editor) så lägger man honom i den rollen istället. Enligt mig är "det det rätta" sättet att hantera roller (grupper).
Rättigheter ska ALDRIG sättas på specifik användare.