新しい ASP.NET Identity システム (1.0) にロールを追加するにはどうすればよいですか? クラスはあるがUserStore
クラスがないRoleStore
。
この問題に関するドキュメントが見つかりません。
新しい ASP.NET Identity システム (1.0) にロールを追加するにはどうすればよいですか? クラスはあるがUserStore
クラスがないRoleStore
。
この問題に関するドキュメントが見つかりません。
RoleManager = new RoleManager<IdentityRole>(
new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));
ASP ID の仕組みを把握するために、asp.net Web ページpage_loadのサンプルで以下のスニペットを使用しました。
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) メソッドに以下の行を追加します
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
そして、コントローラーで:
private ApplicationRoleManager _roleManager;
public ApplicationRoleManager RoleManager
{
get
{
return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
}
private set
{
_roleManager = value;
}
}
私はこの ID スタッフに慣れていないので、それが必要なのか、それともクリーンで正しく行っているのかわかりませんが、これらの手順はうまくいきました
ASP.NET ID は、ロールに関してクレーム対応です。以前のシステムでは、web.config でメンバーシップとロール プロバイダーを構成していたため、これには本当に戸惑いました。
私にとっての問題は、次のようなコードがあることです。
HttpContext.Current.User.IsInRole("some role")
幸いなことに、このロジックは引き続き機能します。CreateAsync
にある ClaimsIdentityFactory.csの関数のロジックを確認できますMicrosoft.AspNet.Identity.Core
。引数の 1 つは ですUserManager
。そうであるかどうかを尋ね、そうである場合は、各ロールをSupportsUserRole
呼び出しGetRolesAsync
て、クレームとして に追加しますClaimIdentity
。これを自分で行う必要はありません。
IsInRole
ここで説明されているように、クレームを使用します。