Avatar billede jmarkling Nybegynder
18. april 2005 - 10:02 Der er 3 kommentarer og
1 løsning

Context.User CustomPrincipal Object problemer.

Hejsa, jeg har lavet et custom principal objekt, så jeg har et custom objekt for hver rolle der findes i systemet. Problemet er bare at jeg få adgang til de funktioner der er i objektet fordi den Context.User er erklæret med Interfacet Iprincipal, som har ganske få funktioner.

Følgende uddrag af kode sørger for oprettelse af objektet i global.asax's Application_AuthenticateRequest funktionen:
**********************************************************
...
string[] roles = authTicket.UserData.Split(new char[]{'|'});
               
//To extract the TYPE, its importen to load the Assembly, where
//the Roles Classes is placed
Assembly a = Assembly.Load("Roles");
//Note that a persons essential Role is at Place 0 in the Role String Array
Type t = a.GetType("Roles." + roles[0].ToString(),true,true);
               
// Create an Identity object
FormsIdentity id = new FormsIdentity( authTicket );
               
//Preperation of arguments to constructor in Roles Costum
object[] args = {id ,roles};

//Create the costum SAM principal object
//by using late binding
Iprincipal principal = (Iprincipal)Activator.CreateInstance(t,args);
               
                               
// This principal will flow throughout the request.
// Attach the new principal object to the current HttpContext
//object
Context.User = principal;

***********************************************************

Problemet er som sagt at når jeg så eksempelvis vil bruge nogle af mine custom funktioner, så har jeg ikke adgang til dem. I min page load vil jeg gerne kunne skrive:

Submenu1.TabItems = Context.User.MENU;

Det giver selvfølgelig en compiler fejl, MENU ikke er defineret i IPrincipal. Jeg kan heller ikke Rolle typen Iprincipal objektet så jeg kan ikke typecaste Useren til den rigtige rolle, så jeg er lidt på bar bund. Hjælp.
Avatar billede snepnet Nybegynder
18. april 2005 - 10:24 #1
du kan godt specialisere interfaces, så hvis du laver dit eget, og nedarver det fra IPrincipal skulle du måske kunne komme i mål.
mvh
Avatar billede snepnet Nybegynder
18. april 2005 - 10:43 #2
altså du kunne prøve med f.eks. en

public interface ISpecialPrincipal : IPrincipal
{
  Menu{get;}
}

så kan du så prøve om dette går :

Submenu1.TabItems = ((ISpecialPrincipal)Context.User).MENU;

mvh
Avatar billede jmarkling Nybegynder
18. april 2005 - 11:44 #3
smid et svar, Jeg lavede et Interface som du sagde mellem mine Roller og IPrincipal, og det kom til at virke. Så et kald kom til at se sådanne ud:


Roles.ICustomPrincipal user = (Roles.ICustomPrincipal)Context.User;
                Submenu1.TabItems = user.MENU;
}
Avatar billede snepnet Nybegynder
18. april 2005 - 11:47 #4
alletiders - du får et svar her :o)
mvh
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