Пример #1
0
        /// <summary>
        /// Получить нужный подзапрос в зависимости от распространения права (null - права нет)
        /// </summary>
        /// <param name="allDealSubQuery">Подкритерий, ограничивающий множество сделок (без учета видимости)</param>
        /// <param name="teamDealSubQuery">Подкритерий, ограничивающий множество сделок (командная видимость)</param>
        /// <param name="personalDealSubQuery">Подкритерий, ограничивающий множество сделок (персональная видимость)</param>
        /// <param name="permissionDistribution">Распространение права</param>
        /// <param name="user">Пользователь, видимостью которого ограничивать множества документов. Null - не ограничивать видимостью</param>
        private TValue GetDealSubQueryByPermissionDistribution <TValue>(TValue allDealSubQuery, TValue teamDealSubQuery, TValue personalDealSubQuery,
                                                                        PermissionDistributionType permissionDistribution, User user) where TValue : class
        {
            // Если пользователь не указан, ограничивать видимость не надо
            if (user == null)
            {
                return(allDealSubQuery);
            }

            switch (permissionDistribution)
            {
            case PermissionDistributionType.All:
                return(allDealSubQuery);

            case PermissionDistributionType.Teams:
                return(teamDealSubQuery);

            case PermissionDistributionType.Personal:
                return(personalDealSubQuery);

            case PermissionDistributionType.None:
                return(null);

            default:
                throw new Exception("Неизвестный тип распространения права.");
            }
            ;
        }
Пример #2
0
        public PermissionDistribution(Permission permission, PermissionDistributionType type)
        {
            if (!PermissionDetailsSet.PermissionDetails.Where(x => x.Permission == permission).First().AvailableDistributionTypes.Contains(type))
            {
                throw new Exception(String.Format("Право «{0}» не может иметь распространение «{1}».",
                                                  permission.GetDisplayName(), type.GetDisplayName()));
            }

            Permission = permission;
            Type       = type;
        }
Пример #3
0
        /// <summary>
        /// Получение максимального типа распространения права пользователя
        /// </summary>
        /// <param name="permission"></param>
        /// <returns></returns>
        public virtual PermissionDistributionType GetPermissionDistributionType(Permission permission)
        {
            PermissionDistributionType type = PermissionDistributionType.None;

            var list = Roles.SelectMany(x => x.PermissionDistributions).Where(x => x.Permission == permission);

            if (list.Any())
            {
                type = list.Max(x => x.Type);
            }

            return(type);
        }
Пример #4
0
        /// <summary>
        /// Получение подкритерия по сделке, ограничивающего ее видимостью данного юзера для данного права
        /// </summary>
        /// <param name="user">Пользователь</param>
        /// <param name="type">Распространение права</param>
        /// <param name="permissionDisplayName">Наименование права</param>
        /// <returns>null, если пользователь не имеет права; иначе подкритерий возможных сделок</returns>
        private ISubCriteria <Deal> RestrictByUserPermissions(User user, PermissionDistributionType type, string permissionDisplayName = "")
        {
            switch (type)
            {
            case PermissionDistributionType.None:
                return(null);

            case PermissionDistributionType.Personal:
                return(dealRepository.GetSubQueryForDealIdOnPersonalPermission(user.Id));

            case PermissionDistributionType.Teams:
                return(dealRepository.GetSubQueryForDealIdOnTeamPermission(user.Id));

            case PermissionDistributionType.All:
                return(dealRepository.GetSubQueryForDealIdOnAllPermission());

            default:
                throw new Exception(String.Format("Неизвестное распространение права «{0}».", permissionDisplayName));
            }
        }