#pragma warning disable IDE0051 // "Remove unused private members" - Used when deserializing from JSON
        private GrouperDocumentMember(GroupMemberSources source, GroupMemberActions action, List <GrouperDocumentRule> rules)
#pragma warning restore IDE0051 // "Remove unused private members"
        {
            Source = source;
            Action = action;
            _rules = rules;
        }
        private static void InternalValidateRules(IList <GrouperDocumentRule> documentRules, GroupMemberSources memberSource, List <ValidationError> validationErrors)
        {
            if (documentRules == null || documentRules.Count == 0)
            {
                validationErrors.Add(new ValidationError(nameof(GrouperDocumentMember.Rules), ResourceString.ValidationErrorMemberObjectHasNoRules));
                return;
            }
            var rules = new Dictionary <string, HashSet <string> >(StringComparer.OrdinalIgnoreCase);

            if (!memberSources.TryGetValue(memberSource, out DocumentMemberValidationRules memberSourceInfo))
            {
                validationErrors.Add(new ValidationError(nameof(GrouperDocumentMember.Source), ResourceString.ValidationErrorInvalidMemberSource, memberSource));
                return;
            }
            foreach (GrouperDocumentRule rule in documentRules)
            {
                if (string.IsNullOrEmpty(rule.Name))
                {
                    validationErrors.Add(new ValidationError(nameof(rule.Name), ResourceString.ValidationErrorInvalidRuleName, rule.Name, memberSource));
                }
                else
                {
                    if (rules.TryGetValue(rule.Name, out HashSet <string> values))
                    {
                        if (!memberSourceInfo.IsMultipleRulesAllowed(rule.Name))
                        {
                            validationErrors.Add(new ValidationError(nameof(rule.Name), ResourceString.ValidationErrorDuplicateRuleName, rule.Name));
                        }
                        if (!values.Add(rule.Value))
                        {
                            validationErrors.Add(new ValidationError("Rule", ResourceString.ValidationErrorDuplicateRule, rule.Name, rule.Value));
                        }
                    }
                    else
                    {
                        rules.Add(rule.Name, new HashSet <string>(StringComparer.OrdinalIgnoreCase)
                        {
                            rule.Value
                        });
                    }
                    if (!memberSourceInfo.InAnyRuleSet(rule.Name))
                    {
                        validationErrors.Add(new ValidationError(nameof(rule.Name), ResourceString.ValidationErrorInvalidRuleName, rule.Name, memberSource));
                    }
                }
            }
            if (validationErrors.Count > 0)
            {
                return;
            }
            if (!memberSourceInfo.HasMatchingRuleSet(rules.Keys))
            {
                validationErrors.Add(new ValidationError(nameof(GrouperDocumentMember.Rules), ResourceString.ValidationErrorInvalidCombinationOfRules, memberSource));
            }
            foreach (GrouperDocumentRule rule in documentRules)
            {
                if (string.IsNullOrEmpty(rule.Value))
                {
                    validationErrors.Add(new ValidationError(nameof(rule.Value), ResourceString.ValidationErrorRuleValueIsNullOrEmpty, rule.Name));
                }
                else if (memberSourceInfo.ValidationRules != null && memberSourceInfo.ValidationRules.TryGetValue(rule.Name, out Regex validationRegex))
                {
                    if (!validationRegex.IsMatch(rule.Value))
                    {
                        validationErrors.Add(new ValidationError(nameof(rule.Value), ResourceString.ValidationErrorRuleValueDoesNotValidate, rule.Name, rule.Value));
                    }
                }
            }
            return;
        }
        public async Task <IActionResult> GetByMemberSourceAsync(GroupMemberSources source, GroupStores?store, bool unpublished, bool deleted)
        {
            IEnumerable <GrouperDocumentEntry> entries = await GetDocumentDb().GetEntriesByMemberSourceAsync(source, store, unpublished, deleted);

            return(Ok(entries));
        }
Beispiel #4
0
 public async Task <IList <GrouperDocumentEntry> > GetEntriesByMemberSourceAsync(GroupMemberSources source, GroupStores?store = null, bool includeUnpublished = false, bool includeDeleted = false)
 {
     return(await InternalGetDocumentEntriesAsync("dbo.get_document_by_member_source",
                                                  new Dictionary <string, object>() {
         { "source", source.ToString() },
         { "store", store?.ToString() },
         { "include_unpublished", includeUnpublished },
         { "include_deleted", includeDeleted }
     }
                                                  ));
 }