如何添加简单的用户角色 - Asp.net MVC C#

时间:2015-02-02 16:13:25

标签: c# asp.net asp.net-mvc

我是asp.net mvc的新手,我一直在寻找添加用户角色的很多不同方法 为我的asp mvc网站。我想使用的是用户数据库 在您制作新的mvc项目时自动为您制作。 那包含表格:

  • AspNetRoles
  • AspNetUserClaims
  • AspNetUserLogins
  • AspNetUserRoles
  • AspNetUsers

我一直在寻找一些教程,这是一个思想领域 对于初学者我认为。

我希望能做的就是这样的事情

[Authorize(Roles = "admin")]
public ActionResult Index()
{
    Return View();
}

具有admin角色的用户可以访问索引页面。 所有的帮助都是适用的。

1 个答案:

答案 0 :(得分:33)

第一步是创建admin角色。这很容易:

context.Roles.Add(new IdentityRole { Name = "admin" });
context.SaveChanges();

将角色添加到现有用户:

var role = context.Roles.SingleOrDefault(m => m.Name == "admin");
user.Roles.Add(new IdentityUserRole { RoleId = role.Id });

这两个步骤都可以而且应该在您Seed的{​​{1}}方法中处理,同时创建应该是管理员的任何初始用户。

为了让管理员能够向其他用户添加角色,您已经完成了第一步:使用Migrations\Configuration.cs保护操作。

接下来,您需要一个视图模型才能与您的用户合作。如下所示:

[Authorize(Roles = "admin")]

您需要将public class UserViewModel { // user properties you'd like to edit here public List<int> SelectedRoleIds { get; set; } public IEnumerable<SelectListItem> RoleChoices { get; set; } } 映射到此视图模型/从此视图模型。然后,您需要在ApplicationUser中手动填充两个角色属性:

UserViewModel应该是所有可用角色的可枚举:

RoleChoices

model.RoleChoices = context.Roles.Select(m => new SelectListItem { Value = m.Id, Text = m.Name }); 应该是当前分配给用户的所有角色的ID列表:

SelectedRoleIds

然后,在您看来,您将构建多选:

model.SelectedRoleIds = user.Roles.Select(m => m.RoleId);

创建新用户时,您只需直接在帖子上设置用户的角色:

@Html.ListBoxFor(m => m.SelectedRoleIds, Model.RoleChoices)

编辑现有用户时,必须更加小心,因为如果为同一用户保存两次相同的角色ID,则会出现完整性错误。首先,您需要删除已取消选择的任何角色:

user.Roles = model.SelectedRoleIds.Select(m => new IdentityUserRole { RoleId = m });

然后,您需要添加任何新选择的角色:

user.Roles.Where(m => !model.SelectedRoleIds.Contains(m.RoleId))
    .ToList().ForEach(role => user.Roles.Remove(role));