我在我的asp.net核心应用程序中设置了cookie身份验证。我有一个登录页面,其中凭据与活动目录匹配。这一切都很好。 接下来我想在我的应用程序中实现授权。我有一个用户表以及对他们的许可。例如阅读和阅读等许可。写。当用户成功通过身份验证后,我想检查这些权限并在限制其他权限的同时向他们显示某些功能。例如,在隐藏读取权限时显示写入权限的某些下拉列表。
在.NET Core中处理此问题的最佳方法是什么。 我已阅读有关添加政策的内容:
combin[, prop.table(table(GENDER))]
GENDER
F M
0.000272 0.232436 0.767292
combin[, prop.table(table(ACT_TYPE))]
ACT_TYPE
CSA SA
0.710686 0.289314
然后在我的控制器中:
for(i in names(combin)) {
combin[, prop.table(table(names(combin)[i]))]
}
从哪里获取登录用户的权限,以及如何验证用户是否具有这些权限。
欣赏投入。
答案 0 :(得分:2)
从哪里可以从我的数据库中获取登录用户的权限 如何验证用户是否有这些许可。
在用户通过身份验证后,您将收集用户的声明,并将其存储在身份验证Cookie中。
例如,SignInAsync方法。
public async Task SignInAsync(User user, IList<string> roleNames)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Sid, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName)
};
foreach (string roleName in roleNames)
{
claims.Add(new Claim(ClaimTypes.Role, roleName));
}
var identity = new ClaimsIdentity(claims, "local", "name", "role");
var principal = new ClaimsPrincipal(identity);
await _httpContextAccessor.HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme, principal);
}
仅供参考:恰好是我将它们存储为角色声明。如果您不想要,则不必遵循该路线。
然后,您可以验证Startup.cs内的政策。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
// Set up policies from claims
// https://leastprivilege.com/2016/08/21/why-does-my-authorize-attribute-not-work/
services.AddAuthorization(options =>
{
options.AddPolicy(Constants.RoleNames.Administrator, policyBuilder =>
{
policyBuilder.RequireAuthenticatedUser()
.RequireAssertion(context => context.User.HasClaim(
ClaimTypes.Role, Constants.RoleNames.Administrator))
.Build();
});
});
...
}
}
Usage与您所描述的相同。
[Authorize(Policy = "Read")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}