Базовые классы AspNet Identity

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Систему AspNet Identity образует множество различных классов, предназначенных для различных задач. Рассмотрим основные классы.

Контекст данных IdentityDbContext

Для взаимодействия с базой данных в пространстве имен Microsoft.AspNet.Identity.EntityFramework определен класс IdentityDbContext. Это обычный контекст данных, производный от DbContext, который уже содержит свойства, необходимые для управления пользователями и ролями: свойства Users и Roles. Хотя в реальном приложении мы будем иметь дело с классами, производными от IdentityDbContext. Например, у нас есть такой контекст данных:

public class ApplicationContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationContext() : base("IdentityDb") { }

    public static ApplicationContext Create()
    {
        return new ApplicationContext();
    }
}

Выведем всех пользователей из бд:

public ActionResult Index()
{
    using(ApplicationContext db = new ApplicationContext())
    {
        return View(db.Users.ToList());
    }
}

Пользователи

Функциональность пользователей в AspNet Identity сосредоточена в классе IdentityUser, который определен в пространстве имен Microsoft.AspNet.Identity.EntityFramework. IdentityUser реализует интерфейс IUser и определяет следующие свойства:

  • Claims: возвращает коллекцию claims - специальных атрибутов, которыми обладает пользователь и которые хранят о пользователе определенную информацию

  • Email: email пользователя

  • Id: уникальный идентификатор пользователя

  • Logins: возвращает коллекцию логинов пользователя

  • PasswordHash: возвращает хэш пароля

  • Roles: возвращает коллекцию ролей пользователя

  • PhoneNumber: возвращает номер телефона

  • SecurityStamp: возвращает некоторое значение, которое меняется при каждой смене настроек аутентификации для данного пользователя

  • UserName: возвращает ник пользователя

  • AccessFailedCount: число попыток неудачного входа в систему

  • EmailConfirmed: возвращает true, если email был подтвержден

  • PhoneNumberConfirmed: возвращает true, если телефонный номер был подтвержден

  • TwoFactorEnabled: если равен true, то для данного пользователя включена двухфакторная авторизация

Как правило, для управления пользователями определяют класс, производный от IdentityUser:

class ApplicationUser : IdentityUser
{
}

Менеджер пользователей UserManager

Непосредственное управление пользователями осуществляется с помощью класса UserManager<T>, которое находится в пространстве имен Microsoft.AspNet.Identity.

Этот класс определяет множество методов, которые имеют как синхронные, так и асинхронные версии. Перечислим основные:

  • ChangePassword(id, old, new) / ChangePasswordAsync(id, old, new): изменяет пароль пользователя

  • Create(user) / CreateAsync(user): создает нового пользователя

  • Delete(user) / DeleteAsync(user): удаляет пользователя

  • Find(user, pass) / FindAsync(user, pass): ищет пользователя по определенному логину и паролю

  • FindById(id) /FindByIdAsync(id): ищет пользователя по id

  • FindByEmail(email) / FindByEmailAsync(email): ищет пользователя по email

  • FindByName(name) / FindByNameAsync(name): ищет пользователя по нику

  • Update(user) / UpdateAsync(user): обновляет пользователя

  • Users: возвращает всех пользователей

  • AddToRole(id, name) / AddToRoleAsync(id, name): добавляет для пользователя с определенным id роль name

  • GetRoles(id) / GetRolesAsync (id): получает все роли пользователя по id

  • IsInRole(id, name) / IsInRoleAsync(id, name): возвращает true, если пользователь с данным id имеет роль name

  • RemoveFromRole(id, name) / RemoveFromRoleAsync(id, name): удаляет роль name у пользователя по id

Создадим класс для управления пользователями:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;

namespace AspNetIdentityApp.Models
{
    public class ApplicationManager : UserManager<ApplicationUser>
    {
        public ApplicationManager(IUserStore<ApplicationUser> store) : base(store) 
        {
		}
        public static ApplicationManager Create (IdentityFactoryOptions<ApplicationManager> options,
                                            IOwinContext context) 
        {
            ApplicationContext db = context.Get<ApplicationContext>();
            ApplicationManager manager = new ApplicationManager(new UserStore<ApplicationUser>(db));
            return manager;
        }
    }
}

Для создания класса используется объект UserStore<ApplicationUser>. Класс UserStore представляет реализацию интерфейса IUserStore<T>. В свою очередь, чтобы создать объект UserStore, необходимо использовать контекст данных ApplicationContext.

Роли в AspNet Identity

Каждая роль в ASP.NET Identity представляет объект интерфейса IRole. В Entity Framework имеется встроенная реализация данного интерфейса в виде класса IdentityRole.

Класс IdentityRole имеет следующие свойства:

  • Id: уникальный идентификатор роли

  • Name: название роли

  • Users: коллекция объектов IdentityUserRole, который связывают пользователя и роль

Для управления ролями в ASP.NET Identity имеется класс RoleManager<T>, где T представляет реализацию интерфейса IRole. Класс RoleManager управляет ролями с помощью следующих синхронных и асинхронных методов:

  • Create(role) / CreateAsync(role): создает новую роль с именем role

  • Delete(role) / DeleteAsync(role): удаляет роль с именем role

  • FindById(id) / FindByIdAsync(id): ищет роль по id

  • FindByName(name) / FindByNameAsync(name): ищет роль по названию

  • RoleExists(name) / RoleExistsAsync(name): возвращает true, если роль с данным названием существует

  • Update(role) / UpdateAsync(role): обновляет роль

  • Roles: возвращает набор всех имеющихся ролей

Теперь рассмотрим применение этих классов в приложении на ASP.NET MVC.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850