public RulesEnumerator(IIndex index, int hitsPerPage = 1000) { _index = index; _ruleQuery = new RuleQuery(); _ruleQuery.Page = 0; _ruleQuery.HitsPerPage = hitsPerPage; Reset(); }
public async Task<ActionResult<List<Rule>>> GetRules([FromBody] RuleQuery ruleQuery, [FromQuery] bool onlyDirectDelegations = false) { List<int> coveredByPartyIds = new List<int>(); List<int> coveredByUserIds = new List<int>(); List<int> offeredByPartyIds = new List<int>(); List<string> appIds = new List<string>(); if (ruleQuery.KeyRolePartyIds.Any(id => id != 0)) { coveredByPartyIds.AddRange(ruleQuery.KeyRolePartyIds); } if (ruleQuery.ParentPartyId != 0) { offeredByPartyIds.Add(ruleQuery.ParentPartyId); } foreach (List<AttributeMatch> resource in ruleQuery.Resources) { string org = resource.FirstOrDefault(match => match.Id == XacmlRequestAttribute.OrgAttribute)?.Value; string app = resource.FirstOrDefault(match => match.Id == XacmlRequestAttribute.AppAttribute)?.Value; if (!string.IsNullOrEmpty(org) && !string.IsNullOrEmpty(app)) { appIds.Add($"{org}/{app}"); } } if (DelegationHelper.TryGetCoveredByPartyIdFromMatch(ruleQuery.CoveredBy, out int partyId)) { coveredByPartyIds.Add(partyId); } else if (DelegationHelper.TryGetCoveredByUserIdFromMatch(ruleQuery.CoveredBy, out int userId)) { coveredByUserIds.Add(userId); } if (ruleQuery.OfferedByPartyId != 0) { offeredByPartyIds.Add(ruleQuery.OfferedByPartyId); } if (offeredByPartyIds.Count == 0) { _logger.LogInformation($"Unable to get the rules: Missing offeredbyPartyId value."); return StatusCode(400, $"Unable to get the rules: Missing offeredbyPartyId value."); } if (offeredByPartyIds.Count == 0 && coveredByPartyIds.Count == 0 && coveredByUserIds.Count == 0) { _logger.LogInformation($"Unable to get the rules: Missing offeredby and coveredby values."); return StatusCode(400, $"Unable to get the rules: Missing offeredby and coveredby values."); } List<Rule> rulesList = await _pip.GetRulesAsync(appIds, offeredByPartyIds, coveredByPartyIds, coveredByUserIds); DelegationHelper.SetRuleType(rulesList, ruleQuery.OfferedByPartyId, ruleQuery.KeyRolePartyIds, ruleQuery.CoveredBy, ruleQuery.ParentPartyId); return Ok(rulesList); }