Avatar billede nixir Nybegynder
05. august 2008 - 15:07 Der 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.

Mvh.


------------------
ASP.NET 3.5 med C#
Avatar billede keysersoze Guru
05. august 2008 - 15:31 #1
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.
Avatar billede 2c Nybegynder
06. august 2008 - 10:31 #2
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.
Avatar billede 2c Nybegynder
06. august 2008 - 10:32 #3
En video for at komme igang med ASP.NET Membership: http://www.asp.net/learn/videos/video-45.aspx
Avatar billede nixir Nybegynder
07. august 2008 - 02:52 #4
Tak for jeres svar.

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?
Avatar billede keysersoze Guru
07. august 2008 - 17:39 #5
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.
Avatar billede nixir Nybegynder
07. august 2008 - 19:21 #6
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?
Avatar billede nixir Nybegynder
07. august 2008 - 19:59 #7
Forresten - mange tak for alle svar so far! Håber i vil hjælpe mig det sidste stykke vej og at i bliver her så i kan få tildelt point for jeres svar!
Avatar billede keysersoze Guru
07. august 2008 - 20:50 #8
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.

Se fx http://msdn.microsoft.com/en-us/library/system.web.security.membership_members.aspx - http://msdn.microsoft.com/en-us/library/system.web.security.roles_members.aspx og http://aspnet.4guysfromrolla.com/articles/120705-1.aspx
Avatar billede nixir Nybegynder
07. august 2008 - 21:12 #9
Kunne membership data gemmes i den samme mssql db som øvrige tabeller?
Avatar billede keysersoze Guru
07. august 2008 - 22:31 #10
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.
Avatar billede nixir Nybegynder
07. august 2008 - 23:15 #11
Havde overset det sidste link..

Tak for hjælpen.. Jeg vil se på det i morgen og give en status..
Avatar billede nixir Nybegynder
11. august 2008 - 13:13 #12
De 3 sidste links var rigtig gode..

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!

Mvh.
Avatar billede 2c Nybegynder
11. august 2008 - 14:15 #13
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
Avatar billede nixir Nybegynder
11. august 2008 - 14:36 #14
Problemet er lidt det der "inden" ;-)

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å?

Når jeg starter min webserver kører den på: http://localhost:49694/

Ved ikke om det på nogen måde er nogen nyttig information..

I øvrigt tak for svaret! Venter lige med at acceptere til keysersoze er her med et svar også.. :-)
Avatar billede nixir Nybegynder
11. august 2008 - 14:38 #15
BTW: Jeg kan ikke huske at jeg oprettede brugernavn/password og ingen af delene fremstår af min connectionstring:

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\myDB.mdf;Integrated Security=True;User Instance=True
Avatar billede 2c Nybegynder
11. august 2008 - 15:00 #16
Ok. Ja, jeg er lidt blank på den. Jeg installerer altid sql expres ved siden af, og så bruger jeg den istedet. (http://www.microsoft.com/downloads/details.aspx?FamilyId=220549b5-0b07-4448-8848-dcc397514b41&displaylang=en)

Så syntes jeg det er en del nemmere at overskue.
Avatar billede keysersoze Guru
11. august 2008 - 21:37 #17
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.
Avatar billede keysersoze Guru
11. august 2008 - 21:37 #18
og forresten mit svar :)
Avatar billede nixir Nybegynder
12. august 2008 - 09:46 #19
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 :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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