Создание своих провайдеров членства и ролей

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

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

ASP.NET MVC предоставляет нам законченную модель провайдеров членства/ролей (в виде универсальных провайдеров или в виде SimpleMembershipPrivider API), которые предлагают нам некоторую стандартную инфраструктуру с уже определенными таблицами. Однако иногда стандартные механизмы членства могут не удовлетворять наши потребности. Например, некоторым модель членства кажется довольно тяжеловесной. А кто-то хотел бы применить свою схему таблиц и авторизации. Поэтому в данном случае нам поможет переопределение стандартных механизмов членства и ролей.

Переопределение членства предполагает, что мы должны переопределить методы абстрактного класса MembershipProvider, который лежит в основе провайдеров членства. А переопределение провайдера ролей включает реализацию абстрактного класса RoleProvider. Посмотрим на пример. Создадим новый проект ASP.NET MVC 4 по шаблону Basic. Назовем его, например, CustomAuthorization.

Первым делом определим модели, которые будут описывать учетные записи. Это у нас будут модели пользователей и ролей, а также контекст данных для доступа к ним. Итак, добавим в папку Models следующие классы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace CustomAuthorization.Models
{
    public class UserContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Role> Roles { get; set; }
    }

    public class User
    {
        public int Id { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
        public DateTime CreationDate { get; set; }

        public int? RoleId { get; set; }
        public Role Role { get; set; }
    }

    public class Role
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

Во-первых, здесь определен класс пользователя, который будет иметь следующие поля: id, адрес электронной почты, дату регистрации, пароль и ссылку на выполняемую роль в системе. Предполагается, что пользователи в качестве логина на сайте будут использовать адрес электронной почты.

Во-вторых, у нас имеется класс роли в системе, а также контекст UserContext, через который мы будем получать данные из БД.

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

Итак, создадим новую базу данных для нашего приложения, поместив ее в папку App_Data. Назовем ее, например, StoreDB.

Создадим таблицу Roles, которая будет хранить роли пользователей:

Создадим таблицу Users, которая будет хранить пользователей:

Итак, столбцы в таблицах в точности соответствуют определению моделей, а в качестве ссылки на роль в таблице Roles в таблице Users используется внешний ключ. Это и все в плане хранения данных, что нам потребуется для аутентификации и авторизации пользователей.

Добавим в таблицу Roles пару ролей (пусть это будут роли администратора и простого пользователя):

И в файле web.config добавим определение строки подключения:

<connectionStrings>
    <add name="UserContext"
		connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\StoreDB.mdf';Integrated Security=True"
		providerName="System.Data.SqlClient" />
</connectionStrings>

Теперь в следующей теме создадим свой провайдер членства.

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