我有复杂的WebApi应用程序。在控制器中,我想根据以下业务规则授权用户访问指定的资源:
要访问资源,用户必须
和
和 - 基于资源类型和行动的其他规则
如何组织和配置策略,要求和RequirementHandler以满足此规则(带OR条件)?
我知道授权API的设计是为了能够处理任何场景,但我需要策略,以便在复杂和不断变化的场景中保持可读性和可读性。
IsAuthorRequirement
和通用处理程序,可以处理所有资源的这个要求。IsSponsorRequirement
和多个处理程序,因为每种资源类型都必须以不同的方式处理。我最初的想法是为每个资源和行动创建自定义策略,例如:
换句话说,每个权限的政策。
public async Task<ActionResult> GetById(int id)
{
var resource = _dbContext.Resources1.Find(id);
var authResult = await _authorizationService.AuthorizeAsync(User, resource, Policies.CanReadResouce1);
if (!authResult.Succeeded) return Forbid();
}
但是现在我觉得我在某种程度上与框架作斗争而且我滥用政策/要求。例如,默认情况下,策略要求所有要求都成功,但我的业务规则具有OR条件。我知道多个需求处理程序会创建事实上的OR条件,但是我应该使用它来在我的buseness规则中创建OR条件吗?