我正在尝试定义 User Roles 的自定义方式,因为我的User表的数据库结构如下:
角色 是布尔值,因此,如果确实是该用户是管理员,则他是普通用户。
我知道我需要在 Startup.cs中声明add.UseAuthorization()
。并且可以在 Controller中添加属性[Roles="Administrator"]
/ [Roles="User"]
,但我不确定如何定义要由“用户”表中的角色列确定的角色。
我一直在搜索互联网,也在阅读有关政策的信息,但我认为这不是正确的实施方式。我在网上找到的所有内容都是关于身份结构的,但是对于如何将其附加到我的角色列上却没有任何意义。
希望,有人可以帮助我。谢谢!
答案 0 :(得分:0)
另一种基于我的数据库而无需进行任何修改的实现方式是使用Claims和Cookies。我已经设法阅读以下文档
我仅遇到一个主要问题,通过阅读this解决了该问题。
我还将添加Login方法和 Startup.cs 行,以便其他人可以看到如何使用它(如果文档不够用的话)。
登录方法,该方法来自 Controller
[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> Login(UserModel userModel)
{
if (_iUserBus.LoginUser(userModel))
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, userModel.Email),
new Claim(ClaimTypes.Role, _iUserBus.GetRole(userModel.Email)),
};
ClaimsIdentity userIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
var authProperties = new AuthenticationProperties
{
IsPersistent = false,
};
await HttpContext.SignInAsync(principal, authProperties);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("Password", "Email and/or Password wrong");
return View();
}
}
Startup.cs
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.LoginPath = "/Users/Login";
options.LogoutPath = "/Users/Logout";
});
希望这对有需要的人有用。