public void AcceptInvite(int organizationId, int userId) { using (TransactionScope scope = new TransactionScope()) { IOrganizationUser user = Repository.Organizations.UpdateUser(organizationId, userId, EmployeeRole.Employee, true); // TODO: удалить старый ключ приглашения UsersInvite OnAcceptInvite.Invoke(new EventArgs <IOrganizationUser>(user)); scope.Complete(); } }
/// <summary> /// Проверяет является ли userId последним админом /// Если является, то бросается эксепшн NeedAdminException /// </summary> /// <exception cref="NeedAdminException"></exception> /// <returns>Настройки пользователя в организации</returns> private IOrganizationUser CheckLastAdmin(int organizationId, int userId) { List <IOrganizationUser> list = Repository.Organizations.GetOrganizationUsers(organizationId).ToList(); IOrganizationUser user = list.First(x => x.UserId == userId); EmployeeRole role = user.GetUserRole(); if (role.HasTheFlag(EmployeeRole.Administrator)) { int count = list.Count(x => x.GetUserRole().HasTheFlag(EmployeeRole.Administrator)); if (count < 2) { throw new NeedAdminException("В организации должен быть хотя бы один администратор"); } } return(user); }
public void UpdateRole(int organizationId, int userId, EmployeeRole role) { // Если пользователя лишают админских прав, нужно проверить, есть ли еще други админы IOrganizationUser user = CheckLastAdmin(organizationId, userId); if (user.UserRole != (int)role) { using (TransactionScope scope = new TransactionScope()) { user.UserRole = (int)role; Repository.SubmitChanges(); OnUpdateRole.Invoke(new EventArgs <IOrganizationUser>(user)); scope.Complete(); } } }
/// <summary> /// Исключение из организации /// </summary> public void RemoveUser(int organizationId, int userId) { // в организации должен остаться хотя бы один админ IOrganizationUser user = CheckLastAdmin(organizationId, userId); using (TransactionScope scope = new TransactionScope()) { // Удаляем со всех досок в этой огранизации List <IBoard> boards = Utility.Boards.GetByOrganization(organizationId); foreach (IBoard board in boards) { Utility.Boards.RemoveUserFromBoard(board, userId); } // Удяляем из огранизации Repository.Organizations.RemoveUser(user); OnEmployeeRemove.Invoke(new EventArgs <IOrganizationUser>(user)); scope.Complete(); } }
public OrganizationsUtility() { OnUpdateRole += (s, e) => { IOrganizationUser user = e.Data; var key = GetKeyEmployee(user.OrganizationId); Cache.Clear(key); }; OnAddEmployee += (s, e) => { IOrganizationUser user = e.Data; var key = GetKeyEmployee(user.OrganizationId); Cache.Clear(key); }; OnEmployeeRemove += (s, e) => { IOrganizationUser user = e.Data; var key = GetKeyEmployee(user.OrganizationId); Cache.Clear(key); key = Cache.GetKeys(CacheKey.User, user.UserId); Cache.Clear(key); }; OnDelete.Add((s, e) => { int organizationId = e.Data; var key = Cache.GetKeys(CacheKey.Organization, organizationId); Cache.Clear(key); }); }
/// <summary> /// Добавлени нового сотрудника в организацию /// пользователь должен подтвердить добавление /// </summary> /// <returns> /// true - добавлен /// false - уже был добавлен /// </returns> /// <exception cref="CanBeOnlyOneFreeException"></exception> /// <exception cref="TariffException"></exception> public bool AddUser(IOrganization organization, IUser user, EmployeeRole role = EmployeeRole.Employee, bool isApproved = false) { List <EmployeeSettings> organizations = GetByUser(user.Id); if (organization.IsFree) { CheckOneFree(organizations); } if (organizations.Any(x => x.Organization.Id == organization.Id)) { return(false); } int?usersCount = Utility.Tariffs.GetAvailableUsersCount(organization); if (usersCount.HasValue && usersCount.Value <= 0) { string message = "Пользователь " + user.Nick + " не может быть добавлен в огранизацию " + organization.Name + "." + Environment.NewLine + "Превышен лимит количества пользователей в огранизации."; throw new TariffException(message); } using (TransactionScope scope = new TransactionScope()) { IOrganizationUser organizationUser = Repository.Organizations.AddUser(organization.Id, user.Id, role, isApproved); OnAddEmployee.Invoke(new EventArgs <IOrganizationUser>(organizationUser)); scope.Complete(); } return(true); }
public void RemoveUser(IOrganizationUser organizationUser) { _Context.OrganizationUsers.DeleteOnSubmit((OrganizationUser)organizationUser); _Context.SubmitChanges(); }