Добавить роль в ASP.NET Identity

Как я могу добавить роль в новой системе удостоверений ASP.NET (1.0)? E сть UserStore класс но нет RoleStore учебный класс.

Я не могу найти документацию по этому вопросу.

4 ответа

Решение
RoleManager = new RoleManager<IdentityRole>(
                  new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));

Начиная с.NET Framework 4.5, Windows Identity Foundation (WIF) полностью интегрирован в.NET Framework.

Я бы посоветовал изучить возможность, на мой взгляд, предпочтительную реализацию авторизации через претензии ( выражение ролей в качестве претензий).

Когда вызывается метод IsInRole(), выполняется проверка, чтобы определить, имеет ли текущий пользователь эту роль. В приложениях, поддерживающих утверждения, роль выражается типом утверждения роли, который должен быть доступен в токене.

Тип заявки роли выражается с использованием следующего URI: " http://schemas.microsoft.com/ws/2008/06/identity/claims/role"

Таким образом, из UserManager вы можете сделать что-то вроде этого (без RoleManager):

var um = new UserManager();
um.AddClaimAsync(1, new Claim(ClaimTypes.Role, "administrator"));

Претензии могут упростить и повысить производительность процессов аутентификации и авторизации. Вы можете использовать роли, хранящиеся в качестве утверждений, для устранения внутренних запросов при каждой авторизации.

При использовании утверждений вам больше не понадобится RoleStore (по крайней мере, для целей эквивалентной авторизации...)

Я использовал приведенные ниже фрагменты в одном примере веб-страницы asp.net page_load, чтобы начать понимать, как работает ASP Identity.

   UserManager userManager = new UserManager();
    var roleStore = new RoleStore<IdentityRole>(new ApplicationDbContext());
    var roleManager = new RoleManager<IdentityRole>(roleStore);
    var applicationRoleAdministrator = new IdentityRole("superadmin");
    if (!roleManager.RoleExists(applicationRoleAdministrator.Name))
    {
        roleManager.Create(applicationRoleAdministrator);
    }
     ApplicationUser applicationUserAdministrator = userManager.FindByName(User.Identity.Name);

    if (!userManager.GetRoles(applicationUserAdministrator.Id).Contains("superadmin"))
    {
        Response.Redirect("~/account/login.aspx?ReturnUrl=" + Request.Url.AbsolutePath);
    }

Конечно, ниже ApplicationDbContext автоматически генерируется с помощью шаблонов ASP.NET 4.5+, как показано ниже

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }
    }

Также создайте приложение Role Manager тоже класс

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

    public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
    {
        //return new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));
        return new ApplicationRoleManager(new RoleStore<IdentityRole>(new ApplicationDbContext()));
    }
}

также добавьте строку ниже в вашем методе startup.Auth.cs => ConfigureAuth(приложение IAppBuilder)

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

И тогда в вашем контроллере:

private ApplicationRoleManager _roleManager;

public ApplicationRoleManager RoleManager
{
    get
    {
        return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
    }
    private set
    {
        _roleManager = value;
    }
}

Я новичок в этом Identity Stuff, и я не уверен, если это необходимо, или я делаю это чисто и правильно, но эти шаги работали для меня

Идентификация ASP.NET - это заявления о ролях. Это действительно смутило меня, потому что в предыдущей системе вы настраивали поставщиков членства и ролей в web.config.

Для меня проблема в том, что у меня есть такой код:

HttpContext.Current.User.IsInRole("some role")

К счастью, эта логика все еще работает. Вы можете увидеть логику в CreateAsync функция в ClaimsIdentityFactory.cs, которая находится в Microsoft.AspNet.Identity.Core, Одним из аргументов является UserManager, Он спрашивает, если это SupportsUserRole и если да, то это вызывает GetRolesAsync и добавляет каждую роль в качестве требования к ClaimIdentity, Нет необходимости делать это самостоятельно.

IsInRole использует претензии, как описано здесь:

http://msdn.microsoft.com/en-us/library/hh545448.aspx

Другие вопросы по тегам