素不相识。我看到了一千个问题而且每一个都丢失了......所以......基本上我在VS(WebAPI)上用身份验证启动了一个新项目。我把标记放在标题上,方法用
[Authorize]
工作正常。后来我在表dbo.AspNetRoles(管理员和用户)中添加了两个角色,并向一个用户添加了dbo.AspNetUserRoles表中的关系,如下所示:
USER ID | Roleid
-----------------------
1d156e98-fc8b-4dcb-8dba-f7c66131f488 | 1001
所以,当我试图说出这个:
[Authorize(role="admin")]
不工作......请求被拒绝。 我需要做什么?
由于
答案 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帮助我深入了解这一点。