将 Identity 2.0 角色添加到自定义身份
Adding Identity 2.0 Roles to custom Identity
我最近开始使用 MVC 5 和 Identity 2.0 开发一个新应用程序,为了使用不同的密码哈希算法,我实现了本指南中详述的自定义身份 (https://code.msdn.microsoft.com/ASPNET-45-MVC5-Custom-1a94ab26#content)。
我已经研究了将角色合并到这个身份实现中的各种方法,但到目前为止还没有找到让它们与这个新的身份实现一起工作的方法。
现在有人知道如何向类似的自定义身份提供商添加角色吗?
任何指导将不胜感激。
您对 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
)。
如果您已经使用接口 IUserStore
实现了 UserStore,那么您还需要实现 IUserRoleStore
。
在最后一个界面中,您可以找到 AddToRoleAsync
、GetRolesAsync
、IsInRoleAsync
、RemoveFromRoleAsync
。
您还必须实施您的 RoleStore (IRoleStore
)。
如果你想阅读一些关于这个主题的好文章,我建议你看看这个 blog。
到目前为止,这家伙已经写了 4 篇关于 ASP.NET Identity 2.x:
的文章
Part 1
Part 2
Part 3
Part 4(你感兴趣的那个)
这是另一个 guy,他写了关于这个主题的有趣内容。
我最近开始使用 MVC 5 和 Identity 2.0 开发一个新应用程序,为了使用不同的密码哈希算法,我实现了本指南中详述的自定义身份 (https://code.msdn.microsoft.com/ASPNET-45-MVC5-Custom-1a94ab26#content)。
我已经研究了将角色合并到这个身份实现中的各种方法,但到目前为止还没有找到让它们与这个新的身份实现一起工作的方法。
现在有人知道如何向类似的自定义身份提供商添加角色吗?
任何指导将不胜感激。
您对 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
)。
如果您已经使用接口 IUserStore
实现了 UserStore,那么您还需要实现 IUserRoleStore
。
在最后一个界面中,您可以找到 AddToRoleAsync
、GetRolesAsync
、IsInRoleAsync
、RemoveFromRoleAsync
。
您还必须实施您的 RoleStore (IRoleStore
)。
如果你想阅读一些关于这个主题的好文章,我建议你看看这个 blog。 到目前为止,这家伙已经写了 4 篇关于 ASP.NET Identity 2.x:
的文章Part 1
Part 2
Part 3
Part 4(你感兴趣的那个)
这是另一个 guy,他写了关于这个主题的有趣内容。