在Asp.net身份创建角色MVC 5在Asp.net身份创建角色MVC 5(Creating Ro

2019-05-13 02:39发布

有如何使用新的Asp.net的身份安全框架很少文档。

我是拼凑起来的东西我可以尝试创建一个新的角色和用户添加到它。 我试过如下: 在ASP.NET身份添加角色

它看起来像它可能已经得到了从这个博客的信息: 构建一个简单的待办事项应用程序与asp.net的身份和相关联的用户确实对

我加入的代码每当模式改变了运行数据库初始化程序。 它未能对RoleExists有以下误差函数:

System.InvalidOperationException mscorlib.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));
    }
}

任何帮助表示赞赏。

Answer 1:

确认您具有以下的特征MyContext

public class MyContext : IdentityDbContext<MyUser>

要么

public class MyContext : IdentityDbContext

该代码为我工作,没有任何修饰!



Answer 2:

开始了:

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);

    }


Answer 3:

下面是说明如何创建角色,修改角色,删除角色和使用ASP.NET身份管理角色完整的文章。 这还包含用户界面,控制器方法等

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

希望这helpls

谢谢



Answer 4:

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.cs ,我增加一条,作为RoleManager

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
{
}


Answer 5:

由于对彼得斯上面的代码,你可以使用这个方法的改进:

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

   if (!roleManager.RoleExists("Member"))
            roleManager.Create(new IdentityRole("Member"));


Answer 6:

我的申请被挂在启动时,当我用彼得Stulinski和戴夫·戈登的代码示例与EF 6.0。 我变了:

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

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

这是有道理的种子方法时,你不希望实例化的另一个实例ApplicationDBContext 。 这可能是由一个事实,即我有加剧Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer()); 在构造函数中ApplicationDbContext



Answer 7:

角色视图模型

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();
    }


Answer 8:

我想分享另一种解决方案添加角色:

<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();
    }


Answer 9:

    public static void createUserRole(string roleName)
    {
        if (!System.Web.Security.Roles.RoleExists(roleName))
        {
            System.Web.Security.Roles.CreateRole(roleName);
        }
    }


Answer 10:

我使用创建角色下面,在他们的代码分配给用户的方法也被列出。 下面的代码确实是在迁移文件夹“configuration.cs”。

string [] roleNames = { "role1", "role2", "role3" };
var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

                IdentityResult roleResult;
                foreach(var roleName in roleNames)
                {
                    if(!RoleManager.RoleExists(roleName))
                    {
                        roleResult = RoleManager.Create(new IdentityRole(roleName));
                    }
                }
                var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
                UserManager.AddToRole("user", "role1");
                UserManager.AddToRole("user", "role2");
                context.SaveChanges();


文章来源: Creating Roles in Asp.net Identity MVC 5