Добавление ролей Identity 2.0 в пользовательскую идентификацию

Недавно я начал работу над новым приложением с использованием MVC 5 и Identity 2.0. Чтобы использовать другой алгоритм хеширования паролей, я реализовал пользовательскую идентификацию, подробно описанную в этом руководстве (https://code.msdn.microsoft.com)./ASPNET-45-MVC5-Custom-1a94ab26#content).

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

Есть ли у кого-нибудь руководство о том, как добавить роли к аналогичному поставщику пользовательских удостоверений?

Любое руководство будет очень признательно.


person CryoFusion87    schedule 10.03.2015    source источник
comment
Этот учебник довольно бесполезен, учитывая, что все, что вам действительно нужно сделать, это реализовать этот интерфейс на объекте и передать его в UserManager. msdn.microsoft. com/ru-ru/library/   -  person James Sampica    schedule 10.03.2015
comment
спасибо за совет, теперь я использую собственный хэшер паролей, реализующий IPasswordHasher   -  person CryoFusion87    schedule 11.03.2015


Ответы (1)


Ваша реализация IdentityUser (ApplicationUser: если вы используете стандартный шаблон) предоставит методы для связывания пользователя с ролями: AddToRoleAsync, AddToRolesAsync, GetRolesAsync, RemoveFromRolesAsync.

Если вы хотите управлять ролями, как я подозреваю, вам нужно добавить файл RoleManager<IdentityRole>.

public class ApplicationRoleManager : RoleManager<IdentityRole>
    {
        public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
            : base(roleStore)
        {
        }

        public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
        {
            var appRoleManager = new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));

            return appRoleManager;
        }
    }

и добавьте это в контекст owin:

app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

ApplicationRoleManager позволит вам создавать роли (CreateAsync), находить (FindByIdAsync), удалять (DeleteAsync).

Пока ваш ApplicationUserManager:

public class ApplicationUserManager : UserManager<ApplicationUser>
{
  ...
}

позволит вам связать роль с пользователем (AddToRoleAsync), удалить (RemoveFromRoleAsync).

Если вы реализовали свой UserStore с помощью интерфейса IUserStore, вам также необходимо реализовать IUserRoleStore.

В этом последнем интерфейсе вы можете найти AddToRoleAsync, GetRolesAsync, IsInRoleAsync, RemoveFromRoleAsync.

Вы также должны реализовать свой RoleStore (IRoleStore).

Если вы хотите прочитать несколько хороших статей на эту тему, я бы посоветовал вам заглянуть в этот блог. Этот парень написал 4 статьи о ASP.NET Identity 2.x:

Часть 1
Часть 2
Часть 3
Часть 4 (то, что вас интересует)

А это еще один парень, который пишет интересные материалы на эту тему.

person LeftyX    schedule 11.03.2015