42

新しい ASP.NET Identity システム (1.0) にロールを追加するにはどうすればよいですか? クラスはあるがUserStoreクラスがないRoleStore

この問題に関するドキュメントが見つかりません。

4

4 に答える 4

45
RoleManager = new RoleManager<IdentityRole>(
                  new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));
于 2013-10-23T12:24:09.837 に答える
7

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 スタッフに慣れていないので、それが必要なのか、それともクリーンで正しく行っているのかわかりませんが、これらの手順はうまくいきました

于 2016-11-18T14:32:57.753 に答える
2

ASP.NET ID は、ロールに関してクレーム対応です。以前のシステムでは、web.config でメンバーシップとロール プロバイダーを構成していたため、これには本当に戸惑いました。

私にとっての問題は、次のようなコードがあることです。

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

幸いなことに、このロジックは引き続き機能します。CreateAsyncにある ClaimsIdentityFactory.csの関数のロジックを確認できますMicrosoft.AspNet.Identity.Core。引数の 1 つは ですUserManager。そうであるかどうかを尋ね、そうである場合は、各ロールをSupportsUserRole呼び出しGetRolesAsyncて、クレームとして に追加しますClaimIdentity。これを自分で行う必要はありません。

IsInRoleここで説明されているように、クレームを使用します。

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

于 2014-03-06T15:40:00.907 に答える