首页 > 解决方案 > 如何在 .Net Core AuthorizationHandler 中授权资源子集

问题描述

我有一个AuthorizationHandler以 aList<Guid>作为资源的实现。我检查每个 guid 以查看当前用户是否有权访问此特定资源。我的问题是,如果我发现他们可以访问某些指南但不能访问其他指南怎么办?有没有办法通过修改以下代码将这种情况反映给控制器,还是我需要单独授权列表中的每个 guid?

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, List<Guid> resource)
    {
        Guid myId = Guid.Parse(context.User.Claims.FirstOrDefault(c => c.Type == "SomeClaim").Value);
        var allAccessableGuids = GetTheGuids(myId);

        foreach(var id in resource)
        {
            if(allAccessableGuids.FirstOrDefault(u => u.Id == id) == null)
            {
                return Task.CompletedTask;
            }
        }
        context.Succeed(requirement);
        return Task.CompletedTask;
    }

如果发现一个 guid 未经授权,该代码当前将无法通过整个列表。请注意,为简单起见,变量名称和方法已更改。

标签: asp.net-coreasp.net-core-identity

解决方案


推荐阅读