2011-07-06 16 views
5

Özel bir iprincpal ve iidentity nesnesinin uygulanmasına takıldım. Bu hakkın nasıl uygulanacağını araştırmak ve daha fazla bilgi ile genişletmek için bir günümü geçiriyorum.Özel üyelik ve rol sağlayıcısı kullanımıyla MVC'de IPrincipal ve IIdentity'nin uygulanması

Bilgileri @Context.User.Identity.Name tam adı veya başka bir şey gibi özel değişkenler ile genişletmek istiyorum.

DÜZENLEME: Şimdi ben şu kodu var ama ben System.Web.Security.FormsIdentityCustomPrincipal için döküm yapılacak olamayacağını bir hata alıyorum @((CustomPrincipal)Context.User.Identity).Nachname okumaya çalışırsanız.

Herhangi bir fikrin var mı?

public class CustomPrincipal : GenericPrincipal 
{ 
    public CustomPrincipal(IIdentity identity, String[] roles) : base(identity, roles){ 

    } 
    public String Vorname { get; set; } 
    public String Nachname { get; set; } 
} 

AccountModel:

public class FormsAuthenticationService : IFormsAuthenticationService 
{ 
    public void SignIn(string userName, bool createPersistentCookie) 
    { 
     if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Der Wert darf nicht NULL oder leer sein.", "userName"); 
     // Grab user information to insert 
     KIMembershipUser membershipUser = (KIMembershipUser)Membership.GetUser(userName); 
     var customInfo = String.Format("{0}|{1}", membershipUser.Vorname, membershipUser.Nachname); 
     // Create and encrypt the ticket 
     var ticket = new FormsAuthenticationTicket(
      2, // Version number 
      userName, // Username 
      DateTime.Now, // Issue date 
      DateTime.Now.AddMinutes(30), // Expiration date 
      createPersistentCookie, // Is it persistent? 
      customInfo // User data 
     ); 
     var encTicket = FormsAuthentication.Encrypt(ticket); 
     // Store the ticket into a cookie 
     var cookie = FormsAuthentication.GetAuthCookie(FormsAuthentication.FormsCookieName,createPersistentCookie); 
     cookie.Value = encTicket; 
     // Append the cookie to the response 
     HttpContext.Current.Response.Cookies.Add(cookie); 

     //FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
    } 

    public void SignOut() 
    { 
     FormsAuthentication.SignOut(); 
    } 
} 

global.asax:

protected void Application_PostAuthenticateRequest(){ 
     // Collect current security information 
     var principal = HttpContext.Current.User as RolePrincipal; 
     if (principal == null) 
      return; 
     var identity = principal.Identity as FormsIdentity; 
     if (identity == null) 
      return; 
     var roles = principal.GetRoles(); 
     // Extract user data in the authentication ticket 
     var customInfo = identity.Ticket.UserData; 
     var tokens = customInfo.Split('|'); 
     // Build a richer principal object 
     var CustomPrincipal = new CustomPrincipal(identity, roles){ 
      Vorname = tokens[0], 
      Nachname = tokens[1] 
     }; 
     // Store the new principal in the HttpContext 
     HttpContext.Current.User = CustomPrincipal; 
    } 
+0

ait? –

+0

Bu nesnelerin olduğunu bilmiyordum. Onları nasıl uzatırım? – float

+0

Onları genişletmek (bunlardan miras) yapmanız gerekmeyebilir, yapmanın en kolay yolu her birinin yeni bir örneğini oluşturmaktır: http://msdn.microsoft.com/en-us/library/y9dd5fx0(v=VS .100) .aspx –

cevap

4

Kullanım (CustomPrincipal)Context.User).Nachname yerine GenericPrincipal & GenericIdentity sınıfları uzanan sorunu nedir (CustomPrincipal)Context.User.Identity).Nachname