Exemplo n.º 1
0
        /// <summary>
        /// Adds the staff handler.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="response">The response.</param>
        /// <returns></returns>
        public AddStaffProfileResponse AddStaffHandler(AddStaffProfileRequest request, AddStaffProfileResponse response)
        {
            ValidateStaffProfile(request);

            var user = CreateUser(request);

            using (var context = _entityContextFactory.CreateEntityContext())
            {
                var staffProfile = new StaffProfile
                {
                    UserId = user.Id,
                    PrimaryOrgUnitId = request.PrimaryOrgUnitId,
                    Title = request.Title
                };

                if (request.OrgUnitIds != null)
                {
                    foreach (int orgUnitId in request.OrgUnitIds)
                    {
                        var staffProfileOrgUnit = new StaffProfileOrgUnit { OrgUnitId = orgUnitId };
                        if (request.Permissions != null)
                        {
                            foreach (var permission in request.Permissions.Where(p => p.OrgUnitId == orgUnitId))
                            {
                                staffProfileOrgUnit.StaffProfileOrgUnitPermissions.Add(new StaffProfileOrgUnitPermission
                                {
                                    AppliesToDescendants = permission.AppliesToDescendants,
                                    IsGranted = permission.IsGranted,
                                    StaffPermissionValue = permission.StaffPermissionValue
                                });
                            }
                        }
                        staffProfile.StaffProfileOrgUnits.Add(staffProfileOrgUnit);
                    }
                }

                context.EntitySet<StaffProfile>().Add(staffProfile);
                context.SaveChanges();

                if (!request.IsBulkUpdateMode)
                {
                    // Update the org unit entity association data to reflect newly added staff user
                    PublishOrgUnitAssociationsHelper.PublishOrgUnitEntityAssociations(context.ObjectContext, "StaffProfiles", staffProfile.Id);
                }

                if(!request.DisableCacheRefresh)
                    UpdateStaffPermissionsCache(user.Id);

                response.StaffProfileId = staffProfile.Id;
                response.UserId = user.Id;
            }
            return response;
        }
Exemplo n.º 2
0
 /// <summary>
 /// Returns the ID of all org units assocaited to the specified staff profile that are also
 /// associated to the specified domain URL.
 /// </summary>
 /// <param name="staffProfile">The staff profile.</param>
 /// <param name="rootDomainUrl">A root domain URL.</param>
 /// <returns></returns>
 public IEnumerable<int> GetStaffOrgUnitIdsForDomain(StaffProfile staffProfile, string rootDomainUrl)
 {
     if (!string.IsNullOrEmpty(rootDomainUrl))
     {
         using (var context = _entityContextFactory.CreateEntityContext())
         {
             if (staffProfile == null)
                 return new int[]{};
             var sqlText = string.Format(CultureInfo.InvariantCulture, "exec GetStaffOrgUnitsForDomain @UserId={0}, @RootDomainUrl='{1}'", staffProfile.UserId, rootDomainUrl);
             return context.ObjectContext.ExecuteStoreQuery<int>(sqlText).ToArray();
         }
     }
     else
     {
         return staffProfile.StaffProfileOrgUnits.Select(o => o.OrgUnitId);
     }
 }
Exemplo n.º 3
0
 private static void UpdateRoles(IEntityContext context, UpdateStaffProfileRequest request, StaffProfile staffProfile)
 {
     List<int> newRoleIds = null;
     if (request.RoleIds != null)
     {
         newRoleIds = request.RoleIds.ToList();
         EnsureStaffRoleAdded(context, newRoleIds);
     }
     if (newRoleIds != null)
     {
         var userRoleSet = context.EntitySet<UserRole>();
         var existingRoleIds = staffProfile.User.UserRoles.Select(ur => ur.Role.Id).ToList();
         foreach (var existingRoleId in existingRoleIds)
         {
             if (!newRoleIds.Contains(existingRoleId))
             {
                 var existingUserRole = staffProfile.User.UserRoles.Single(ur => ur.Role.Id == existingRoleId);
                 staffProfile.User.UserRoles.Remove(existingUserRole);
                 userRoleSet.Remove(existingUserRole);
             }
         }
         foreach (var newRoleId in newRoleIds)
         {
             if (!existingRoleIds.Contains(newRoleId))
             {
                 var newRole = context.EntitySet<Role>().Find(newRoleId);
                 staffProfile.User.AddRole(newRole);
             }
         }
     }
 }
Exemplo n.º 4
0
        private static void UpdatePermissions(IEntityContext context, UpdateStaffProfileRequest request, StaffProfile staffProfile)
        {
            if (request.Permissions == null)
                return;
            var permissionSet = context.EntitySet<StaffProfileOrgUnitPermission>();
            foreach (var staffProfileOrgUnit in staffProfile.StaffProfileOrgUnits)
            {
                var permissionsForOrgUnit = request.Permissions.Where(p => p.OrgUnitId == staffProfileOrgUnit.OrgUnitId);

                if (!permissionsForOrgUnit.Any())
                {
                    foreach (var permissionToRemove in staffProfileOrgUnit.StaffProfileOrgUnitPermissions.ToList())
                    {
                        permissionSet.Remove(permissionToRemove);
                    }
                    continue;
                }
                foreach (var existingPermission in staffProfileOrgUnit.StaffProfileOrgUnitPermissions.ToList())
                {
                    if (!permissionsForOrgUnit.Select(p => p.StaffPermissionValue).Contains(existingPermission.StaffPermissionValue))
                    {
                        permissionSet.Remove(existingPermission);
                    }
                    else
                    {
                        var updatedPermission = permissionsForOrgUnit.Single(p => p.StaffPermissionValue == existingPermission.StaffPermissionValue);
                        existingPermission.IsGranted = updatedPermission.IsGranted;
                        existingPermission.AppliesToDescendants = updatedPermission.AppliesToDescendants;
                    }
                }
                var permissionsToAdd = permissionsForOrgUnit.Where(p => !staffProfileOrgUnit.StaffProfileOrgUnitPermissions.Select(ep => ep.StaffPermissionValue).Contains(p.StaffPermissionValue));
                foreach (var newPermission in permissionsToAdd)
                {
                    var staffProfileOrgUnitPermission = new StaffProfileOrgUnitPermission
                    {
                         AppliesToDescendants = newPermission.AppliesToDescendants,
                         IsGranted = newPermission.IsGranted,
                         StaffPermissionValue = newPermission.StaffPermissionValue
                    };
                    staffProfileOrgUnit.StaffProfileOrgUnitPermissions.Add(staffProfileOrgUnitPermission);
                }
            }
        }
Exemplo n.º 5
0
 private static void UpdateOrgUnits(IEntityContext context, UpdateStaffProfileRequest request, StaffProfile staffProfile)
 {
     if (request.OrgUnitIds != null)
     {
         var staffProfileOrgUnitObjectSet = context.EntitySet<StaffProfileOrgUnit>();
         var staffProfileOrgUnitPermissionsObjectSet = context.EntitySet<StaffProfileOrgUnitPermission>();
         var existingOrgUnits = staffProfile.StaffProfileOrgUnits.ToList();
         foreach (var orgUnit in existingOrgUnits)
         {
             if (!request.OrgUnitIds.Any(o => o == orgUnit.OrgUnitId))
             {
                 var permissions = orgUnit.StaffProfileOrgUnitPermissions.ToList();
                 foreach (var permission in permissions)
                 {
                     orgUnit.StaffProfileOrgUnitPermissions.Remove(permission);
                     staffProfileOrgUnitPermissionsObjectSet.Remove(permission);
                 }
                 staffProfile.StaffProfileOrgUnits.Remove(orgUnit);
                 staffProfileOrgUnitObjectSet.Remove(orgUnit);
             }
         }
         foreach (int id in request.OrgUnitIds)
         {
             if (!staffProfile.StaffProfileOrgUnits.Any(o => o.OrgUnitId == id))
             {
                 staffProfile.StaffProfileOrgUnits.Add(new StaffProfileOrgUnit
                 {
                     OrgUnitId = id,
                     StaffProfileId = staffProfile.Id
                 });
             }
         }
     }
 }