Я использую MVC5 Identity 2.0, чтобы пользователи могли входить на мой веб-сайт, где данные аутентификации хранятся в базе данных SQL. Asp.net Identity реализован стандартным образом, что можно найти во многих онлайн-руководствах.
Класс ApplicationUser в IdentityModels был расширен за счет включения некоторых настраиваемых свойств, таких как целое число OrganizationId. Идея состоит в том, что можно создать множество пользователей и назначить их в общую организацию для целей взаимосвязи с базой данных.
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; }
}
Как я могу получить свойство OrganizationId текущего вошедшего в систему пользователя из контроллера? Доступно ли это с помощью метода после входа пользователя в систему, или я всегда получаю OrganizationId из базы данных на основе UserId каждый раз, когда выполняется метод контроллера?
Читая в Интернете, я видел, что мне нужно использовать следующее, чтобы войти в UserId и т. Д.
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
Однако OrganizationId не является свойством, доступным в User.Identity. Нужно ли мне расширять User.Identity, чтобы включить свойство OrganizationId? Если да, то как мне это сделать?
Причина, по которой мне так часто нужен OrganizationId, заключается в том, что многие запросы к таблицам зависят от OrganizationId для получения данных, относящихся к организации, связанной с вошедшим в систему пользователем.