0

У меня есть система, которая использует встроенную систему Identity для аутентификации пользователей для раздела admin.Аутентифицировать пользовательский класс пользователя в Asp.Net MVC

Я хочу, чтобы другие пользователи вошли в систему через внешнюю веб-службу, но задавались вопросом, могу ли я создать для них другой класс пользователей и по-прежнему использовать встроенные функции, такие как атрибут [Авторизовать].

Скажем, пользовательский класс выглядит следующим образом:

public class CustomUser 
{ 
    public string Name { get; set; } 
    public string Ssn { get; set; } 
} 

Я хотел бы добавить этого пользователя к роли, например «CustomUser» так в контроллере я хотел бы использовать атрибут авторизовать так:

[Authorize(Roles="customUser")] 
public ActionResult DoStuff() 
{ 
    // do stuff 
} 

Возможно ли это, пользовательский класс пользователя и его аутентификация вручную?

ответ

0

Несомненно. Просто наследовать от ApplicationUser (или как бы вы назвали ваш IdentityUser производный класс):

public class CustomUser : ApplicationUser 
{ 
    public string Name { get; set; } 
    public string Ssn { get; set; } 
} 

Однако, вы не можете использовать его непосредственно Authorize как предлагает ваш пример кода. Вам необходимо либо:

  1. Выполняйте индивидуальную проверку действий, чтобы проверить тип пользователя.

  2. Добавить роль пользователю и разрешить эту настраиваемую роль.

  3. Создание пользовательского AuthorizeAttribute, который проверяет, что пользователь является правильным типом

UPDATE

Когда вы унаследовали от ApplicationUser вы не получите отдельную таблицу. EF добавит столбец Discriminator в dbo.AspNetUsers, который будет иметь значение «ApplicationUser» или «CustomUser», в зависимости от того, какой из них был сохранен. Затем EF будет использовать этот столбец для создания экземпляра соответствующего класса при запросе пользователей из базы данных.

Следует отметить, что UserManager на самом деле является экземпляром UserManager<ApplicationUser>. Это общий класс, поэтому любой пользовательский класс указывается как аргумент типа, когда экземпляр будет состоять из класса UserManager. В результате, если вы хотите работать с CustomUser, вам понадобится экземпляр UserManager<CustomUser>.

+0

Хорошо, это здорово. Я просто не понимаю, как сохранить этого пользовательского пользователя и проверить его подлинность. У меня была бы новая таблица db для него со всеми полями CustomUser и некоторыми полями ApplicationUser. Могу ли я создать CustomUser и выполнить проверку подлинности с помощью UserManager? – joks

+0

См. Обновление выше. –

+0

Большое спасибо за вашу помощь. У меня есть последний вопрос, если вы не возражаете. Мне нужно создать новый SignInManager, чтобы иметь возможность вручную аутентифицировать CustomUser? Или есть более простой способ сделать это? – joks