Avatar billede dj Nybegynder
22. november 2002 - 04:00 Der er 1 kommentar og
1 løsning

Session User Objekt

Hejsa :)

Når en bruger er logged ind ønsker jeg at gemme nogle oplysninger om denne bruger i et user objekt.
f.eks. info som navn og ID på brugeren i databasen.

Jeg ønsker ikke at gemme infoen i session variabler, grundet at jeg synes at have faldt over en mere interessant løsning :)

Nemlig hvor man erstatter User.Identity med sit eget user objekt der implementerer IPrincipal interfacet. Således at man kan tilføje egne variabler til User objektet.

Jeg har dog søgt lidt rundt på dette og det bedste jeg er kommet frem til er denne info i QuickStarten:

public class MyPrincipal : IPrincipal {
  // implement application-defined role mappings
}

// In a Global.asax file:
public void WindowsAuthentication_OnAuthenticate(Object Source, WindowsAuthenticationEventArgs e) {
  // Attach a new application-defined class that implements IPrincipal to
  // the request.
  // Note that since IIS has already performed authentication, the provided
  // identity is used.
  e.User = new MyPrincipal(e.Identity);
}

For det første er jeg ikke helt sikker på at det er denne løsning der er relevant i min sammenhæng da jeg ikke er ude på at håndtere roller igennem dette. For det andet bruger jeg forms-authentication istedet for WindowsAuthentication.

Det jeg gerne vil være istand til, er at når jeg nu kan skrive User.Identity.Name for at få navnet på brugeren der er logged ind, så ville jeg gerne kunne skrive User.Identity.ID for at få DB ID'et på brugeren.

Så for at opsummere lidt går mit spørgsmål altså på hvordan kan override User objectet således jeg selv kan implementere en klasse der indeholder de variabler jeg gerne vil kunne tilgå derfra.

I må meget gerne vise et simpel kode eksempel, så blir jeg glad :)
Avatar billede Slettet bruger
09. februar 2003 - 11:01 #1
Jeg bruger noget ala samme princip at tjekke hvilke roller min bruger har rettigheder til. Koden udføres i global.asax i protected void Application_AuthenticateRequest(Object sender, EventArgs e)
---- code snip ---
String[] roles;
roles = Usr.GetRoles(User.Identity.Name);
containing the roles in the auth ticket
Context.User = new GenericPrincipal(Context.User.Identity, roles);
--- code snip end ---

Håber du kan blive lidt klogere på det lille stump kode, ved ikke om du bare kan gøre på samme måde når du skal tilføje din brugerID.
Avatar billede dj Nybegynder
26. oktober 2003 - 13:17 #2
Spørgsmålet har ikke den store relevans længere så jeg lukker det.
Må indrømme jeg ikke har prøvet din løsning, men du får dog pointene alligevel :)
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