示例#1
0
 public TimezBoardsUser(IBoardsUser boardsUser)
 {
     BoardId  = boardsUser.BoardId;
     IsActive = boardsUser.IsActive;
     UserId   = boardsUser.UserId;
     UserRole = boardsUser.UserRole;
 }
示例#2
0
        /// <summary>
        /// Проперка разрешений на доске
        /// </summary>
        /// <param name="boardId">ид доски</param>
        /// <param name="taskId">ид задачи</param>
        /// <param name="roles">требуемые привелегии</param>
        /// <param name="isArchive">архивность задачи, имеет значение при taskId != null</param>
        /// <param name="settings">имеющиеся права</param>
        /// <returns>true - требуемые разрешения есть</returns>
        public bool CheckUsersRoles(int boardId, int?taskId, bool?isArchive, IBoardsUser settings, UserRole roles)
        {
            bool?taskAccess = null;

            if (taskId.HasValue)
            {
                ITask task = isArchive.HasValue && isArchive.Value
                                        ? Utility.Tasks.GetFromArchive(taskId.Value)
                                        : Utility.Tasks.Get(boardId, taskId.Value);

                if (settings.UserRole.HasTheFlag((int)UserRole.Owner))
                {
                    taskAccess = true;
                }

                else if (((int)roles & settings.UserRole).HasTheFlag((int)UserRole.Customer))
                {
                    taskAccess = task.CreatorUserId == settings.UserId;
                }

                else if (((int)roles & settings.UserRole).HasTheFlag((int)UserRole.Executor))
                {
                    taskAccess = task.ExecutorUserId == settings.UserId;
                }

                else
                {
                    taskAccess = false;
                }
            }

            return((!taskAccess.HasValue || taskAccess.Value) &&
                   settings.IsActive &&
                   settings.UserRole.HasTheFlag((int)roles));
        }
示例#3
0
        /// <summary>
        /// Создание доски пользователем
        /// </summary>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="user">Кто создает доску</param>
        /// <param name="refreshPeriod"></param>
        /// <param name="organization"></param>
        /// <returns></returns>
        /// <exception cref="TariffException"></exception>
        public IBoard Create(string name, string description, IUser user, int?refreshPeriod = null, IOrganization organization = null)
        {
            CheckLimits(organization);

            using (TransactionScope scope = new TransactionScope())
            {
                // Создаем
                IBoard board = Repository.Boards.Create(
                    name, description, refreshPeriod
                    , organization != null ? organization.Id : (int?)null);

                // Добавляем владельца
                IBoardsUser boardsUser = Repository.BoardsUsers.AddUserToBoard(board.Id, user.Id, UserRole.All);

                // Добавляем статусы поумолчанию
                Repository.TasksStatuses.Create(board.Id, "Беклог", true, false, null, null);
                Repository.TasksStatuses.Create(board.Id, "Сделать", false, true, 10, 480);
                Repository.TasksStatuses.Create(board.Id, "Делается сейчас", false, true, 2, null);
                Repository.TasksStatuses.Create(board.Id, "Отдано на тестирование", false, false, 10, null);

                // Цвета поумолчанию
                AddColor(board.Id, "Первоочередное", "#D8004B");
                AddColor(board.Id, "Важное", "#FCD62D");
                AddColor(board.Id, "Обычные задачи", "#7BB28A", true);
                AddColor(board.Id, "Не срочное", "#1FACE1");

                // Создать проект
                Utility.Projects.Create(board.Id, "Проект", user);

                OnCreate.Invoke(new EventArgs <IBoardsUser>(boardsUser));
                scope.Complete();
                return(board);
            }
        }
示例#4
0
        /// <summary>
        /// Исключение пользователя с доски
        /// </summary>
        /// <exception cref="NeedAdminException">На доске должен оставаться хотя бы один админ</exception>
        public void RemoveUserFromBoard(IBoard board, int userId)
        {
            List <UserSettings> settings = GetParticipants(board.Id);
            UserSettings        user     = settings.FirstOrDefault(x => x.User.Id == userId);

            if (user != null)
            {
                if (user.Settings.UserRole.HasTheFlag((int)UserRole.Owner))
                {
                    int count = settings.Count(x => x.Settings.UserRole.HasTheFlag((int)UserRole.Owner));
                    if (count < 2)
                    {
                        throw new NeedAdminException("Доске \"" + board.Name + "\" требуется хотя бы один админ.");
                    }
                }

                bool hasTasks = Repository.Tasks.HasTasks(board.Id, userId);
                if (hasTasks)
                {
                    throw new TasksExistsException(user.User, board);
                }

                using (TransactionScope scope = new TransactionScope())
                {
                    IBoardsUser boardsUser = Repository.BoardsUsers.Delete(board.Id, userId);

                    // TasksModel - Очистка кеша задач
                    // BoardsModel - Очистка кеша досок
                    OnRemoveUserFromBoard(boardsUser);

                    scope.Complete();
                }
            }
        }
示例#5
0
        IBoardsUser Delete(IBoardsUser boardUser)
        {
            // Заглушка с копией данных
            TimezBoardsUser dummy = new TimezBoardsUser(boardUser);

            _Context.BoardsUsers.DeleteOnSubmit((BoardsUser)boardUser);
            _Context.SubmitChanges();

            return(dummy);
        }
示例#6
0
 public TaskFilter(int boardId, IBoardsUser settings
                   , IEnumerable <int> allStatuses, IEnumerable <int> allUserIds
                   , IEnumerable <int> allProjectIds, IEnumerable <int> allColorIds)
 {
     BoardId        = boardId;
     _Settings      = settings;
     _AllStatuses   = allStatuses;
     _AllColorIds   = allColorIds;
     _AllProjectIds = allProjectIds;
     _AllUserIds    = allUserIds;
 }
示例#7
0
        /// <summary>
        /// Фильтр инициализированный идами полных коллекций
        /// </summary>
        public TaskFilter CreateFilter(int boardId)
        {
            int[] projects     = Utility.Projects.GetByBoard(boardId).Select(x => x.Id).ToArray();
            int[] users        = Utility.Boards.GetAllExecutorsOnBoard(boardId).Select(x => x.Id).ToArray();
            int[] colorsList   = Utility.Boards.GetColors(boardId).Select(x => x.Id).ToArray();
            int[] statusesList = Utility.Statuses.GetByBoard(boardId).Select(x => x.Id).ToArray();

            IBoardsUser settings = Utility.Boards.GetUserSettings(boardId, Utility.Authentication.UserId).Settings;

            return(new TaskFilter(boardId, settings, statusesList, users, projects, colorsList));
        }
示例#8
0
 /// <summary>
 /// При удалении пользователя с доски удаляются все связанные задачи в кеше
 /// </summary>
 /// <param name="userOnBoard"></param>
 void BoardsUtility_OnRemoveUserFromBoard(IBoardsUser userOnBoard)
 {
     using (new UpdateLock(userOnBoard.BoardId))
     {
         HashSet <ITask> tasks = GetTasksCache(userOnBoard.BoardId);
         if (tasks != null)
         {
             tasks.RemoveWhere(t => t.ExecutorUserId == userOnBoard.UserId);
         }
     }
 }
示例#9
0
        /// <summary>
        /// Обновление настроек пользователя на досте
        /// </summary>
        /// <param name="boardId"></param>
        /// <param name="userId"></param>
        /// <param name="isActive">null = значение не меняется</param>
        public IBoardsUser UpdateUserOnBoard(int boardId, int userId, bool isActive)
        {
            using (var scope = new TransactionScope())
            {
                IBoardsUser boardUser = Repository.BoardsUsers.GetBoardsUsers(boardId, userId);
                boardUser.IsActive = isActive;
                Repository.SubmitChanges();

                OnUpdateUserOnBoard.Invoke(new EventArgs <IBoardsUser>(boardUser));

                scope.Complete();

                return(boardUser);
            }
        }
示例#10
0
        public void UpdateRole(int boardId, int userId, UserRole role)
        {
            IBoardsUser boardUser = Repository.BoardsUsers.GetBoardsUsers(boardId, userId);

            if (boardUser.UserRole != (int)role)
            {
                if (boardUser.UserRole.HasTheFlag((int)UserRole.Owner) && !role.HasTheFlag(UserRole.Owner))
                {
                    // Если пользователя лишают админских прав, нужно проверить, есть ли еще други админы
                    if (Repository.BoardsUsers.AdminsCount(boardId) == 1)
                    {
                        throw new NeedAdminException("На доске должен быть хотя бы один администратор");
                    }
                }

                boardUser.UserRole = (int)role;
                Repository.SubmitChanges();

                OnUpdateUserOnBoard.Invoke(new EventArgs <IBoardsUser>(boardUser));
            }
        }