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

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

  • AspNetRoles
  • AspNetUserClaims
  • AspNetUserLogins
  • AspNetUserRoles
  • AspNetUsers

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

我想要做的就是这样

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

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

第一步是创建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方法的Migrations\Configuration.cs ,同时创建应该是管理员的任何初始用户。

为了让管理员能够将角色添加到其他用户,您已经完成了第一步:使用[Authorize(Roles = "admin")]保护操作。

接下来,您需要一个视图模型来与您的用户合作。 类似于以下内容:

 public class UserViewModel { // user properties you'd like to edit here public List SelectedRoleIds { get; set; } public IEnumerable RoleChoices { get; set; } } 

您需要将ApplicationUser映射到此视图模型/从该视图模型映射。 然后,您需要在UserViewModel手动填充两个角色属性:

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

 model.RoleChoices = context.Roles.Select(m => new SelectListItem { Value = m.Id, Text = m.Name }); 

SelectedRoleIds应该是当前分配给用户的所有角色的ID列表:

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

在您的视图中,您将构建多选:

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

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

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

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

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

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

 var existingUserRoles = user.Roles.Select(m => m.RoleId); model.SelectedRoleIds.Except(existingUserRoles) .ToList().ForEach(roleId => user.Roles.Add(new IdentityUserRole { RoleId = roleId }));