MVC 5角色开箱即用

时间:2016-01-18 18:04:55

标签: asp.net-web-api asp.net-mvc-5 visual-studio-2015 asp.net-roles

素不相识。我看到了一千个问题而且每一个都丢失了......所以......基本上我在VS(WebAPI)上用身份验证启动了一个新项目。我把标记放在标题上,方法用

[Authorize]

工作正常。后来我在表dbo.AspNetRoles(管理员和用户)中添加了两个角色,并向一个用户添加了dbo.AspNetUserRoles表中的关系,如下所示:

USER ID    |    Roleid
-----------------------
1d156e98-fc8b-4dcb-8dba-f7c66131f488  |  1001

所以,当我试图说出这个:

[Authorize(role="admin")]

不工作......请求被拒绝。 我需要做什么?

由于

2 个答案:

答案 0 :(得分:1)

不是"身份验证"但是"授权"。试试这个:

void AddChain(PolyChain* pol, PolyChain*& main)

但首先要创建你的角色:

[Authorize(Roles = "admin")]

并为用户分配角色:

context.Roles.Add(new IdentityRole { Name = "admin" });
context.SaveChanges();

数据库初始化代码可以放在你想要的任何地方,这取决于你:

  • 当应用程序启动时 - 检查角色是否存在,如果没有则创建它们
  • 通过自定义角色插入生成迁移并更新迁移脚本
  • 将它们手动放入数据库中 - 但您必须采取正确的方式 - 从代码中添加角色并检查数据库中已更改的内容

答案 1 :(得分:1)

所以最后我使用以下代码来解决这个问题:

public class DAO
{
    public static void addRoleToUser(ApplicationUser user, string role)
    {
        // EL SIGUIENTE CODIGO AGREGA AL USUARIO UN ROL
        ApplicationDbContext context = new ApplicationDbContext(); 
        var userStore = new UserStore<ApplicationUser>(context);
        var userManager = new UserManager<ApplicationUser>(userStore);
        userManager.AddToRole(user.Id,role);
    }
}

将角色同步到用户和上下文数据库。 在注册后的控制器中,新用户自动添加rol&#34; User&#34;代码:

// POST api/Account/Register
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }
        // Codigo de Ali para agregar el rol "User" al usuario inmediatamente es creado
        DAO.addRoleToUser(user, "User");
        return Ok();
    }

感谢dawidr帮助我深入了解这一点。