小编Car*_*ens的帖子

在 ASP.NET Core 中的每个操作之前查询数据库以获取角色授权

ASP.NET Core 结合 Identity 已经提供了一种在登录后检查角色的简单方法,但我想在每次控制器操作之前查询当前用户的当前角色的数据库。

我已经阅读了 Microsoft 提供的基于角色、基于策略和基于声明的授权。( https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction ) 这些解决方案似乎都没有检查每个操作的角色。这是我以某种基于策略的授权的形式实现预期结果的最新尝试:

在 Startup.cs 中:

DatabaseContext context = new DatabaseContext();

services.AddAuthorization(options =>
{
    options.AddPolicy("IsManager",
        policy => policy.Requirements.Add(new IsManagerRequirement(context)));
    options.AddPolicy("IsAdmin",
        policy => policy.Requirements.Add(new IsAdminRequirement(context)));
});
Run Code Online (Sandbox Code Playgroud)

在我的需求文件中:

public class IsAdminRequirement : IAuthorizationRequirement
{
    public IsAdminRequirement(DatabaseContext context)
    {
        _context = context;
    }

    public DatabaseContext _context { get; set; }
}
public class IsAdminHandler : AuthorizationHandler<IsAdminRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsAdminRequirement requirement)
    {
        // Enumerate all current users roles
        int userId = Int32.Parse(context.User.Claims.FirstOrDefault(c …
Run Code Online (Sandbox Code Playgroud)

c# authentication user-roles asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
4124
查看次数