85

新しい Asp.net Identity Security Framework の使用に関するドキュメントはほとんどありません。

新しいロールを作成してユーザーを追加するためにできることをまとめました。私は次のことを試しました: ASP.NET Identity にロールを追加します。

このブログから情報を得たようです: asp.net ID を使用してシンプルな to-do アプリケーションを構築し、ユーザーと to-do を関連付ける

モデルが変更されるたびに実行されるデータベース初期化子にコードを追加しました。RoleExists次のエラーで関数に失敗します。

System.InvalidOperationExceptionmscorlib.dll で発生したエンティティ タイプ IdentityRole は、現在のコンテキストのモデルの一部ではありません。

protected override void Seed (MyContext context)
{
    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
    var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

    // Create Admin Role
    string roleName = "Admins";
    IdentityResult roleResult;

    // Check to see if Role Exists, if not create it
    if (!RoleManager.RoleExists(roleName))
    {
        roleResult = RoleManager.Create(new IdentityRole(roleName));
    }
}

どんな助けでも大歓迎です。

4

11 に答える 11

75

どうぞ:

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));


   if(!roleManager.RoleExists("ROLE NAME"))
   {
      var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
      role.Name = "ROLE NAME";
      roleManager.Create(role);

    }
于 2013-10-31T10:47:17.140 に答える
26

MyContextクラスの次の署名があることを確認します

public class MyContext : IdentityDbContext<MyUser>

または

public class MyContext : IdentityDbContext

コードは変更なしで機能しています!!!

于 2013-10-31T06:25:20.393 に答える
26

ASP.NET ID を使用して、ロールの作成、ロールの変更、ロールの削除、およびロールの管理を行う方法を説明する完全な記事を次に示します。これには、ユーザー インターフェイス、コントローラー メソッドなども含まれます。

http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc

これが役立つことを願っています

ありがとう

于 2014-06-26T01:38:31.467 に答える
15

ではASP.NET 5 rc1-final、次のことを行いました。

作成済み(テンプレートによる作成ApplicationRoleManagerと同様の方法)ApplicationUser

public class ApplicationRoleManager : RoleManager<IdentityRole>
{
    public ApplicationRoleManager(
        IRoleStore<IdentityRole> store,
        IEnumerable<IRoleValidator<IdentityRole>> roleValidators,
        ILookupNormalizer keyNormalizer,
        IdentityErrorDescriber errors,
        ILogger<RoleManager<IdentityRole>> logger,
        IHttpContextAccessor contextAccessor)
        : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
    {
    }
}

ConfigureServicesStartup.csRoleManagerとして追加しました

services.
    .AddIdentity<ApplicationUser, IdentityRole>()
    .AddRoleManager<ApplicationRoleManager>();

新しいロールを作成するには、Configure次から呼び出します。

public static class RoleHelper
{
    private static async Task EnsureRoleCreated(RoleManager<IdentityRole> roleManager, string roleName)
    {
        if (!await roleManager.RoleExistsAsync(roleName))
        {
            await roleManager.CreateAsync(new IdentityRole(roleName));
        }
    }
    public static async Task EnsureRolesCreated(this RoleManager<IdentityRole> roleManager)
    {
        // add all roles, that should be in database, here
        await EnsureRoleCreated(roleManager, "Developer");
    }
}

public async void Configure(..., RoleManager<IdentityRole> roleManager, ...)
{
     ...
     await roleManager.EnsureRolesCreated();
     ...
}

これで、ルールをユーザーに割り当てることができます

await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(User.GetUserId()), "Developer");

またはAuthorize属性で使用

[Authorize(Roles = "Developer")]
public class DeveloperController : Controller
{
}
于 2015-12-20T14:11:12.117 に答える
6

上記の Peters コードの改善として、これを使用できます。

   var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

   if (!roleManager.RoleExists("Member"))
            roleManager.Create(new IdentityRole("Member"));
于 2014-06-09T17:59:05.847 に答える
2

ロール ビュー モデル

public class RoleViewModel
{
    public string Id { get; set; }
    [Required(AllowEmptyStrings = false)]
    [Display(Name = "RoleName")]
    public string Name { get; set; }
}

コントローラー方式

    [HttpPost]
    public async Task<ActionResult> Create(RoleViewModel roleViewModel)
    {
       if (ModelState.IsValid)
       {
           var role = new IdentityRole(roleViewModel.Name);
           var roleresult = await RoleManager.CreateAsync(role);
           if (!roleresult.Succeeded)
           {
               ModelState.AddModelError("", roleresult.Errors.First());
               return View();
           }
           return RedirectToAction("some_action");
       }
       return View();
    }
于 2015-08-27T14:24:32.523 に答える
1

ロールを追加するための別のソリューションを共有したかった:

<h2>Create Role</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<span class="label label-primary">Role name:</span>
<p>
    @Html.TextBox("RoleName", null, new { @class = "form-control input-lg" })
</p>
<input type="submit" value="Save" class="btn btn-primary" />
}

コントローラ:

    [HttpGet]
    public ActionResult AdminView()
    {
        return View();
    }

    [HttpPost]
    public ActionResult AdminView(FormCollection collection)
    {
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

        if (roleManager.RoleExists(collection["RoleName"]) == false)
        {
            Guid guid = Guid.NewGuid();
            roleManager.Create(new IdentityRole() { Id = guid.ToString(), Name = collection["RoleName"] });
        }
        return View();
    }
于 2015-02-25T21:04:13.590 に答える
0
    public static void createUserRole(string roleName)
    {
        if (!System.Web.Security.Roles.RoleExists(roleName))
        {
            System.Web.Security.Roles.CreateRole(roleName);
        }
    }
于 2016-12-07T08:59:48.027 に答える