/// <summary> /// Assigns a list of a application data policies to the team given a list of application data policy IDs. This function will verify that there is a legitimate /// application data poliy associated with each ID before adding it. /// </summary> /// <param name="team"></param> /// <param name="applicationDataPolicyIds"></param> /// <returns></returns> private async Task <TeamModel> AssignApplicationDataPoliciesToTeamFromDataPolicyIdList(TeamModel team, List <Guid> applicationDataPolicyIds) { if (applicationDataPolicyIds == null) { return(team); } team.ApplicationDataPolicies = new List <TeamApplicationDataPolicyModel>(); // If the list is set, but there are no elements in it, this is intepretted as re-setting the associated application data policies. if (applicationDataPolicyIds.Count == 0) { return(team); } foreach (var applicationDataPolicyId in applicationDataPolicyIds) { var applicationDataPolicyToAdd = await applicationDataPolicyRepository.GetByIdAsync(applicationDataPolicyId); if (applicationDataPolicyToAdd == null) { throw new ItemNotFoundException($"Unable to find Application Data Policy with ID '{applicationDataPolicyId}' when attempting to assign it to team '{team.Name}'."); } team.ApplicationDataPolicies.Add(new TeamApplicationDataPolicyModel { Team = team, ApplicationDataPolicy = applicationDataPolicyToAdd }); } return(team); }
/// <summary> /// Assigns a list of a application data policies to the team given a list of application data policy IDs. This function will verify that there is a legitimate /// application data poliy associated with each ID before adding it. /// </summary> /// <param name="team"></param> /// <param name="applicationDataPolicyIds"></param> /// <returns></returns> private async Task AssignApplicationDataPoliciesToTeamFromDataPolicyIdList(TeamModel team, List <Guid> applicationDataPolicyIds, Guid changedById) { if (applicationDataPolicyIds == null) { return; } team.ApplicationDataPolicies = new List <TeamApplicationDataPolicyModel>(); // If the list is set, but there are no elements in it, this is intepretted as re-setting the associated application data policies. if (applicationDataPolicyIds.Count == 0) { return; } foreach (var applicationDataPolicyId in applicationDataPolicyIds) { var applicationDataPolicyToAdd = await applicationDataPolicyRepository.GetByIdAsync(applicationDataPolicyId); if (applicationDataPolicyToAdd == null) { throw new ItemNotFoundException($"Unable to find Application Data Policy with ID '{applicationDataPolicyId}' when attempting to assign it to team '{team.Name}'."); } // If there is a Sub-Realm associated with team, we must ensure that the data-policy is also is associated with the same sub-realm. if (team.SubRealm != null) { // scan through all the sub-realms associated with the data policy to ensure that the data policy is assigned to the sub-realm that the team is associated with. var subRealmDataPolicy = applicationDataPolicyToAdd.SubRealmApplicationDataPolicies.FirstOrDefault(sradp => sradp.SubRealm.Id == team.SubRealm.Id); if (subRealmDataPolicy == null) { throw new ItemNotProcessableException($"Attempting to add a data policy with ID '{applicationDataPolicyToAdd.Id}' to a team within the '{team.SubRealm.Name}' sub-realm but the data policy does not exist within that sub-realm."); } } team.ApplicationDataPolicies.Add(new TeamApplicationDataPolicyModel { Team = team, ApplicationDataPolicy = applicationDataPolicyToAdd, ChangedBy = changedById }); } }
private async Task AssignApplicationDataPoliciesToSubRealmFromApplicationDataPolicyIdListAsync(SubRealmModel subRealm, List <Guid> applicationDataPolicyIds, Guid changedById) { // We want to track which permissions were added so that their changedById can be updated, but leave the permissions that already exist un-touched. List <SubRealmApplicationDataPolicyModel> newApplicationDataPolicyState = new List <SubRealmApplicationDataPolicyModel>(); foreach (var applicationDataPolicyId in applicationDataPolicyIds) { // Search existing sub-realm permissions state for the permission. var existingSubRealmApplicationDataPolicy = subRealm.SubRealmApplicationDataPolicies.FirstOrDefault(SubRealmApplicationDataPolicyModel => SubRealmApplicationDataPolicyModel.ApplicationDataPolicyId == applicationDataPolicyId); if (existingSubRealmApplicationDataPolicy != null) { newApplicationDataPolicyState.Add(existingSubRealmApplicationDataPolicy); continue; } // If the application data policy is new, attempt to add it, but perform some checks first. ApplicationDataPolicyModel existingApplicationDataPolicy = await applicationDataPolicyRepository.GetByIdAsync(applicationDataPolicyId); if (existingApplicationDataPolicy == null) { throw new ItemNotFoundException($"Application Data Policy with ID '{applicationDataPolicyId}' not found when attempting to assign it to a sub-realm."); } newApplicationDataPolicyState.Add(new SubRealmApplicationDataPolicyModel { ApplicationDataPolicy = existingApplicationDataPolicy, SubRealm = subRealm, ChangedBy = changedById }); // If a permission was added, it indicates that parent sub-realm was changed. subRealm.ChangedBy = changedById; } subRealm.SubRealmApplicationDataPolicies = newApplicationDataPolicyState; }