Rob*_*Rob 17 c# asp.net asp.net-mvc
我是asp.net mvc的新手,我一直在寻找为我的asp mvc网站添加用户角色的许多不同方法.我想使用在创建新的mvc项目时自动为您创建的用户数据库.包含表格:
我一直在寻找一些教程,对于我认为的初学者来说这是一个思想领域.
我想要做的就是这样
[Authorize(Roles = "admin")]
public ActionResult Index()
{
    Return View();
}
因此,具有admin角色的用户可以访问索引页面.所有帮助都是有用的.
Chr*_*att 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方法中处理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
});
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
    }));
| 归档时间: | 
 | 
| 查看次数: | 20854 次 | 
| 最近记录: |