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

How to add a simple user roles - ASP.NET MVC C#

我是 ASP.NET MVC 的新手,我一直在寻找添加用户角色的多种不同方式 对于我的 ASP.NET MVC 站点。我想使用在您创建新的 ASP.NET MVC 项目时自动为您创建的用户数据库。

包含以下表格:

我一直在看一些教程,我认为这对初学者来说有点雷区。

我只想做这样的事情:

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

因此具有管理员角色的用户可以访问索引页面。

第一步是创建 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 });

这两个步骤都可以而且应该在 Migrations\Configuration.csSeed 方法中处理,同时创建任何应该是管理员的初始用户。

对于管理员向其他用户添加角色的能力,您已经完成了第一步:使用 [Authorize(Roles = "admin")] 保护操作。

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

public class UserViewModel
{
    // User properties you'd like to edit goes here

    public List<int> SelectedRoleIds { get; set; }

    public IEnumerable<SelectListItem> RoleChoices { get; set; }
}

您需要映射您的 ApplicationUser to/from 此视图模型。然后,您需要手动填充 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
    }));