示例#1
0
        /// <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);
        }
示例#2
0
        /// <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
                });
            }
        }
示例#3
0
        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;
        }