示例#1
0
        public SecurityGroup(SecurityColumnDescriptor columnDescriptor, IList<SecurityConfig> securityConfigs, bool canAccessColumnData, string pageFlagName, string fullSetFlagName)
        {
            Columns = new List<SecurityColumnDescriptor> { columnDescriptor };

            CanAccessColumnData = canAccessColumnData;
            SecurityConfigs = securityConfigs;

            PageGroupFlagName = pageFlagName;
            FullSetGroupFlagName = fullSetFlagName;
        }
        public static SecurityGroupCollection GetSecurityGroups(ISecurityContext securityContext, IMQ1Identity identity, ProcessDefinition processDefinition, IEnumerable<SecurityColumnDescriptor> fields = null)
        {
            var groups = new SecurityGroupCollection();

            if (Utils.CurrentUserHasAdministratorRights)
                return groups;

            if (securityContext == null || processDefinition == null || identity == null)
                return groups;

            var fieldDefinitions = new List<IBaseFieldDefinition>();
            var fieldList = fields != null ? fields.ToList() : null;

            if (fields != null && fieldList.Any())
            {
                foreach (var fieldName in fieldList.Select(x => x.ColumnName))
                {
                    try
                    {
                        var field = processDefinition.GetField(fieldName);
                        fieldDefinitions.Add(field);
                    }
                    catch (ArgumentException)
                    {
                    }
                }
            }
            else
            {
                fieldDefinitions.AddRange(
                    processDefinition.GetAllFields());
            }

            foreach (var fieldDefinition in fieldDefinitions)
            {
                var canAccessData = CanAccessField(securityContext, fieldDefinition, identity);

                var securityConfigs = canAccessData 
                    ? GetSecurityConfigsForField(securityContext, fieldDefinition, identity) 
                    : new List<SecurityConfig>();

                SecurityColumnDescriptor columnDescriptor = null;
                if (fieldList != null)
                    columnDescriptor = fieldList.FirstOrDefault(x => x.ColumnName == fieldDefinition.SystemName);

                if (columnDescriptor == null)
                    columnDescriptor = new SecurityColumnDescriptor(fieldDefinition.SystemName);

                groups.AddColumnSecurityConfigs(columnDescriptor, securityConfigs, canAccessData);
            }

            return groups;
        }