Пример #1
0
        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();
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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();
                }
            }
        }
Пример #4
0
        /// <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();
            }
        }
Пример #5
0
        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);
            });
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
 public void RemoveUser(IOrganizationUser organizationUser)
 {
     _Context.OrganizationUsers.DeleteOnSubmit((OrganizationUser)organizationUser);
     _Context.SubmitChanges();
 }