public Task <AuthorizationPolicy> GetPolicyAsync(string policyName) { if (policyName.StartsWith(nameof(RequireMaster))) { AuthorizationPolicy policy = MasterRequirement.TryParsePolicy(policyName); if (policy != null) { return(Task.FromResult(policy)); } } return(FallbackPolicyProvider.GetPolicyAsync(policyName)); }
public async Task <AuthorizationPolicy?> GetPolicyAsync(string policyName) { if (policyName.StartsWith(nameof(RequireMaster))) { var policy = MasterRequirement.TryParsePolicy(policyName); if (policy != null) { return(policy); } } return(await FallbackPolicyProvider.GetPolicyAsync(policyName)); }
public static AuthorizationPolicy TryParsePolicy(string policyName) { var array = policyName.Split("__"); var(policyType, permissionString) = (array.FirstOrDefault(), array.Skip(1).FirstOrDefault()); if (string.IsNullOrWhiteSpace(policyType) || string.IsNullOrWhiteSpace(permissionString)) { return(null); } var requirement = new MasterRequirement(); switch (policyType) { case nameof(RequireMasterOrAdmin): requirement.AllowAdmin = true; break; case nameof(RequireMasterOrPublish): requirement.AllowPublish = true; break; case nameof(RequireMaster): break; default: return(null); } if (!Enum.TryParse <Permission>(permissionString, out var permission)) { return(null); } requirement.Permission = permission; var policy = new AuthorizationPolicyBuilder(); policy.AddRequirements(requirement); return(policy.Build()); }