Kullanıcıların web sitemde oturum açması için MVC5 Identity 2.0 kullanıyorum, burada kimlik doğrulama ayrıntıları bir SQL veritabanında depolanıyor. Asp.net Kimliği, birçok çevrimiçi eğiticide bulunabileceği gibi standart bir şekilde uygulanmıştır.
IdentityModels'teki ApplicationUser sınıfı, tamsayı OrganizationId gibi bazı özel özellikleri içerecek şekilde genişletilmiştir. Buradaki fikir, birçok kullanıcının veritabanı ilişkisi amacıyla ortak bir Kuruluşa oluşturulabilmesi ve atanabilmesidir.
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
//Extended Properties
public DateTime? BirthDate { get; set; }
public long? OrganizationId { get; set; }
//Key Mappings
[ForeignKey("OrganizationId")]
public virtual Organization Organization { get; set; }
}
Şu anda oturum açmış olan kullanıcının OrganizationId özelliğini bir denetleyiciden nasıl alabilirim? Bu, bir kullanıcı oturum açtıktan sonra bir yöntem aracılığıyla kullanılabilir mi, yoksa bir denetleyici yöntemi her yürütüldüğünde, Kullanıcı Kimliğine dayalı olarak Kuruluş Kimliği'ni veritabanından her zaman alabilir miyim?
Web'de okurken Gördüğüm gibi oturum açmış UserId vb. Almak için aşağıdakileri kullanmam gerekiyor.
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
Ancak OrganizationId, User.Identity'de kullanılabilen bir özellik değildir. User.Identity'yi OrganizationId özelliğini içerecek şekilde genişletmem gerekir mi? Eğer öyleyse, bunu nasıl yapacağım?
OrganizationId'ye bu kadar sık ihtiyaç duymamın nedeni, birçok tablo sorgusunun, oturum açmış kullanıcıyla ilişkilendirilmiş Kuruluşla ilgili verileri almak için OrganizationId'ye bağlı olmasıdır.