コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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());
        }