05. august 2008 - 15:07Der er
17 kommentarer og 2 løsninger
Flere roles per user?
Jeg er i gang med at lære asp.net sammen med c#. Jeg lærer bedst ved at lave en opgave, så jeg har sat mig for at lave et system der er så fleksibelt som muligt, da jeg tror på det er den vej opgaver i fremtiden vil bevæge sig.
Jeg er dog støt på en knudepunkt hvor jeg ikke føler jeg kan finde hjælp på nettet.
Mit eget lille projekt kan håndtere flere "services" på samme site. Eksempler på services: - Profil - Administration - Forum
Hver service indeholder flere funktioner. Lad os tage fat i forum: - Skriv indlæg - Rediger egne indlæg - Rediger alle indlæg - Slet indlæg
I mit system skal nogle brugere (via administration service) oprette nye brugere. De kan nu tildele brugere rettigheder til services og alle eller nogle funktioner.
Eksempelvis vil en Superadmin (med fulde rettigheder til alle services) gerne kunne tildele en bruger "Rediger alle indlæg" funktionen, når brugeren er blevet redaktør eller lign.
Hvis vi ser på databasen har jeg 3 tabeller der er vigtige i forhold til denne case (læg mærke til Services ikke er en af disse 3): - Brugere - Funktioner - mange-til-mange imellem de to ovenstående: Rettigheder
Rettigheder indeholder bruger id samt et funktion id. På denne måde kan man se hvilke rettigheder en bruger har.
...SPØRGSMÅLET... Langt om længe kommer spørgsmålet så:
Er det en fordel at benytte asp.net membership? Og i så fald: Hvordan ville det virke? Altså hvordan ville man tilpasse tabellerne så Roles bliver en del af det?
Eller er det for kompliceret med så fleksible rettigheder at benytte membership? Og i så fald, ville man så bygge sit eget login og hvordan ville det laves godt (link til eksempe, forklaring eller lign er rigeligt)?
Mange tak fordi du læste alt dette. Jeg ved godt det er et meget bredt spørgsmål, men jeg håber alligevel du fangede det vigtigste og kan hjælpe mig fremad.
fordelen ved at benytte det i frameworket eksisterende er, at du får en masse foræret (metoder til brugertjek osv) og det er et kæmpe område så at bygge det fra bunden vil alt andet lige koste pænt med tid. Vil du udvidde provideren i frameworket kan du få en del eksempler ved at søge efter "custom membership provider" på google.
Som jeg umiddelbart forstår din case vil mulighederne i frameworket vel allerede være tilstrækkeligt; du kan oprette brugere samt roller og du kan binde dem sammen. Tilbage er så kun det du kalder services og det kunne selvfølgelig sagtens lægges i databasen men du kunne vel lige så godt styre det direkte ud fra rollerne i din sides logik.
Ja, det er en stor fordel at benytte ASP.NET bruger administration.
Det virker på den måde, at du kører et program der opretter de nødvendige tabeller i din database. Her kan en bruger sagtens være medlem af flere roller, du kan beskytte sider i en folder ved hjælp af web.config, og du kan spørge på brugerens role(er) i koden.
Det er nemt at bruge, og du får typisk en uges fuldtidsarbejde foræret.
Det anede mig også at det måtte være den rette løsning!
Jeg kunne rigtig godt tænke mig et par kode-eksempler på at tilknytte flere roller til samme bruger.. Er det muligt?
I mit eksempel må det være Funktionerne der svarer til Roles - right? Mit "problem" er så bare lidt, at mine Roles (som gemmes i Membership) også skal benyttes som "en del af siden".. Planen var jo egentlig at lave en tabel i DB, da data skal trækkes i andre sammenhænge end kun brugere.. Så skal der laves en 1:1 relation mellem roles i membership og funktioner i min db?
det er muligt ja - du kan evt bare starte med at benytte asp.net configuration til opsætning af bruger/roller, den burde give et godt indblik.
Jeg forstår ikke helt det sidste i dit spm - for der bliver jo lavet nogle tabeller i databasen til brugere og roller og i frameworket ligger der klasser og metoder svarende til de tabeller. Du vil så vha disse klasser og metoder kunne styre og vise hvad du end har lyst til derfra - og også bruge brugere og roller i forbindelse med resten af dit projekt, lettest selvfølgelig hvis du kører det i samme database.
Så er det nok fordi jeg ikke har styr på at få membeship-data til at ligge i samme database som resten af sitet..
Jeg kører en MsSQL Express standard fra Visual Studio 2008.
Jeg har rodet med roles i asp.net config.. Men det skal virke automatisk.. Igen, fleksibilitet.. Så jeg skal kunne oprette roles via sitet (burde ikke være et problem), men når jeg så til gengæld skal til at tilknytte flere roles til en user, så begynder problemerne at melde sig for mig.. Nogen der kan hjælpe her?
På Roles klassen findes fx metode "AddUserToRole" hvormed du kan binde en bruger til en rolle - kalder du den metode sker alt helt som ønsket, så handler det kun om at opbygge et grafisk interface der passer til behovet. Her kan du fx bruge metode "GetAllRoles" til at hente roller ud - og tilsvarende har du "GetAllUsers" på membership-klassen.
det kan du sagtens - jeg mener det bliver forklaret i mit sidste link, ellers findes det et sql-script der, hvis man har de nødvendige rettigheder, kan eksekveres så det hele bliver klaret.
Det sidste link er nok det jeg skal bruge for at komme helt i mål, dog har jeg et nyt spørgsmål: Hvad er mit servernavn, brugernavn og password på min standard mssql express db?
Jeg er villig til at give point og oprette en ny tråd hvis i føler det er mere hensigtsmæssigt?
Indtil videre mener jeg keysersoze har fortjent en overvægt af de samlede point, dog vil jeg også gerne lidt til 2c da jeg brugte noget af det han skrev også.. Så hvis i begge smider et svar uanset hvad ville det være dejligt!
Brugernavn og password laver du når du installere databasen.
Men hvis du har en sql expres database kan du forbinde til den med dit membership halløj ved at skrive følgende i web.config: <remove name="LocalSqlServer"/> <add name="LocalSqlServer" connectionString="Server=xxx;UID=zzz;PWD=yyy;initial catalog=yyy"/>
Inden skal du have oprettet tabeller mm med aspnet_regsql.exe
Jeg har fundet frem til at vejen frem er aspnet_regsql.exe, men det er her jeg skal bruge server(navn).. Jeg prøvede localhost uden held, og tænkte i måske vidste hvad der skal stå?
den connection-string henviser til en lokal fil-database og ikke en server-database - og så er valg foretaget under installationen af en evt express database ligegyldig. Overvej også om en mdf-fil er det rigtige at benytte - det er ikke muligt alle steder.
Det færdige "produkt" skal hostes på egne servere, så jeg er sådan set bare interesseret i at det er hurtigt :-) Jeg troede faktisk at en mdf-fil var den måde en mssql express database blev gemt på..
Tror lige jeg vil hente noget MS SQL Server i så fald ... Ser lige om jeg kan finde en 2008 version da jeg kører VS 2008 og gerne vil lære mig selv og bruge det nyeste på markedet nu når jeg er igang alligevel :-)
Jeg acceptere jeres svar i håb om at i har givet mig hvad jeg skal bruge :-)
Synes godt om
Ny brugerNybegynder
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.