我是 ASP.NET MVC 的新手,我一直在研究许多添加用户角色的不同方法 对于我的 ASP.NET MVC 站点。我想使用在您创建新的 ASP.NET MVC 项目时自动为您创建的用户数据库。
包含表格:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
我一直在看一些教程,我认为这对初学者来说有点雷区。
我只想做这样的事情:
[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.cs
的 Seed
方法中处理,同时创建任何应该是管理员的初始用户。
对于管理员向其他用户添加角色的能力,您已经完成了第一步:使用 [Authorize(Roles = "admin")]
保护操作。
接下来,您需要一个 View 模型来与您的用户一起工作。类似于以下内容:
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
映射到/从该 View 模型。然后,您需要在 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)
创建新用户时,您可以直接在帖子上简单地设置用户的角色:
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
}));
关于c# - 如何添加简单的用户角色 - ASP.NET MVC C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281940/