【问题标题】:Web API Individual Accounts: how add RolesWeb API 个人帐户:如何添加角色
【发布时间】:2014-08-09 18:40:47
【问题描述】:

在 ASP Web API 中,我使用个人帐户来注册用户。我已经按照这个官方教程实现了这个功能:

Web API Individual Accounts

现在我希望能够为用户分配一个角色:当执行注册方法时,我还想在 POST 请求中传递角色:

{
   "UserName": "Alice",
   "Password": "password123",
   "ConfirmPassword": "password123",
   "Role": "admin"                  -> i want add this
}

Register 方法必须正确地评估数据库的表。 我如何处理 web api 个人帐户中的角色?有教程吗?

谢谢

【问题讨论】:

    标签: c# .net asp.net-mvc entity-framework asp.net-web-api


    【解决方案1】:

    创建用户和适当的角色后,只需在代码中添加以下行

    var roleresult = UserManager.AddToRole(currentUser.Id, "RoleName");
    

    您还应该将 Role 属性添加到您的视图模型(通常称为 RegisterBindingModel),该属性将传递给 Register 方法。

    更新

    这是一个完整的示例 Register 方法的外观(RoleEntityUserEntity 是我在 Identity 中相应类的实现,但是这也适用于您的自定义实现)

    public async Task<IdentityResult> RegisterAsync(RegisterViewModel model)
    {
        var user = new UserEntity { UserName = model.UserName };
        var role = model.Role.ToString();
    
        if (await _roleManager.FindByNameAsync(role) == null)
        {
            var roleResult = await _roleManager.CreateAsync(new RoleEntity(role));
    
            if (roleResult != IdentityResult.Success)
            {
                return roleResult;
            }
        }
    
        var result = await _userManager.CreateAsync(user, model.Password);
    
        if (!result.Succeeded)
        {
            return result;
        }
    
        var addToRoleResult = await _userManager.AddToRoleAsync(user.Id, role);
    
        return !addToRoleResult.Succeeded ? addToRoleResult : IdentityResult.Success;
    }
    

    我的 RegisterViewModel 看起来像这样

    public class RegisterViewModel
    {
        [Required(ErrorMessage="This field is required")]
        [Display(Name = "User name", Prompt="Please enter user name...")]
        public string UserName { get; set; }
    
        [Required(ErrorMessage = "This field is required")]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password", Prompt="Please enter password...")]
        public string Password { get; set; }
    
        [DataType(DataType.Password)]
        [Display(Name = "Confirm password", Prompt = "Please enter confirm password...")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    
        [Required(ErrorMessage = "This field is required")]
        [Display(Name = "Role")]
        public Roles Role { get; set; }
    }
    

    【讨论】:

    • 有什么指南或书籍我可以在哪里记录这个论点?
    • official documentation 缺少很多信息。更好的资源是Brock AllenScott Allen 的博客。
    • @Tom 我更新了我的帖子,为您提供了一个完整的示例,您可以如何自定义 Register 方法以支持角色添加。视图模型中的 Role 属性也可以是字符串。
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2014-03-11
    • 2013-10-27
    • 1970-01-01
    • 2014-07-20
    • 2018-08-10
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多