Это должно быть просто, но я просто не могу понять этого после всех моих поисков в Google. Вот что я хочу. У меня есть настраиваемая таблица пользователей (на данный момент нет ролей), для которой я хотел бы авторизоваться. Для этого мне придется реализовать собственный поставщик членства, что я уже сделал. Однако у меня вопрос, как мне установить собственный IPrincipal для HttpContext.Current.User? Где это должно произойти? Допустим, у меня есть следующая настройка:
public class CustomMembershipProvider : MembershipProvider
{
private IUserRepository _repository;
public CustomMembershipProvider(IUserRepository repository)
{
_repository = repository;
}
public override bool ValidateUser(string username, string password)
{
//check user repository
}
//additional methods omitted for brevity
}
Затем у меня есть собственный пользовательский класс, инструменты IPrincipal
и IIdentity
public class CustomUser : IPrincipal
{
public CustomUser(string name, int userId, string additionalInfo)
{
Identity = new CustomIdentity(name, userId, additionalInfo);
}
public IIdentity Identity { get; private set; }
public bool IsInRole(string role)
{
return true;
}
}
public class CustomIdentity : IIdentity
{
public CustomIdentity(string name, int userId, string additionalInfo)
{
Name = name;
UserId = userId;
AdditionalInfo = additionalInfo;
}
public string Name { get; private set; }
public string AuthenticationType
{
get { return "CustomAuth"; }
}
public bool IsAuthenticated
{
get { return !String.IsNullOrEmpty(Name); }
}
public int UserId { get; private set; }
public string AdditionalInfo { get; private set; }
}
Итак, мой вопрос: где правильное место для установки контекста. Пользователь экземпляра этого настраиваемого пользователя? Нужен ли мне настраиваемый атрибут авторизации? Если да, то как это будет выглядеть?