private void Initialize(IEnumerable <ValidationRuleDefinition> rules)
 {
     if (rules == null)
     {
         throw new ArgumentNullException("rules");
     }
     if (this.featuresToRules != null && this.cmdletToRules != null)
     {
         return;
     }
     lock (this.listLock)
     {
         if (this.featuresToRules == null || this.cmdletToRules == null)
         {
             this.cmdletToRules   = new Dictionary <string, List <ValidationRuleDefinition> >();
             this.featuresToRules = new Dictionary <string, List <ValidationRuleDefinition> >();
             foreach (ValidationRuleDefinition validationRuleDefinition in rules)
             {
                 if (validationRuleDefinition.Expressions != null && validationRuleDefinition.Expressions.Count > 0)
                 {
                     foreach (ValidationRuleExpression validationRuleExpression in validationRuleDefinition.Expressions)
                     {
                         MonadFilter monadFilter = new MonadFilter(validationRuleExpression.QueryString, null, validationRuleExpression.Schema);
                         validationRuleExpression.QueryFilter = monadFilter.InnerFilter;
                     }
                 }
                 OrganizationValidationRuleDefinition organizationValidationRuleDefinition = validationRuleDefinition as OrganizationValidationRuleDefinition;
                 if (organizationValidationRuleDefinition != null)
                 {
                     if (organizationValidationRuleDefinition.OverridingAllowExpressions != null && organizationValidationRuleDefinition.OverridingAllowExpressions.Count > 0)
                     {
                         foreach (ValidationRuleExpression validationRuleExpression2 in organizationValidationRuleDefinition.OverridingAllowExpressions)
                         {
                             MonadFilter monadFilter2 = new MonadFilter(validationRuleExpression2.QueryString, null, validationRuleExpression2.Schema);
                             validationRuleExpression2.QueryFilter = monadFilter2.InnerFilter;
                         }
                     }
                     if (organizationValidationRuleDefinition.RestrictionExpressions != null && organizationValidationRuleDefinition.RestrictionExpressions.Count > 0)
                     {
                         foreach (ValidationRuleExpression validationRuleExpression3 in organizationValidationRuleDefinition.RestrictionExpressions)
                         {
                             MonadFilter monadFilter3 = new MonadFilter(validationRuleExpression3.QueryString, null, validationRuleExpression3.Schema);
                             validationRuleExpression3.QueryFilter = monadFilter3.InnerFilter;
                         }
                     }
                 }
                 foreach (RoleEntry roleEntry in validationRuleDefinition.ApplicableRoleEntries)
                 {
                     string key = roleEntry.Name;
                     if (roleEntry is CmdletRoleEntry)
                     {
                         key = ((CmdletRoleEntry)roleEntry).FullName;
                     }
                     RBACHelper.AddValueToDictionaryList <ValidationRuleDefinition>(this.cmdletToRules, key, validationRuleDefinition);
                 }
                 RBACHelper.AddValueToDictionaryList <ValidationRuleDefinition>(this.featuresToRules, validationRuleDefinition.Feature, validationRuleDefinition);
             }
         }
     }
 }
예제 #2
0
        internal static QueryFilter ConstructRoleEntryFilter(string name, ManagementRoleEntryType type, string snapinName)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }
            char value;

            switch (type)
            {
            case ManagementRoleEntryType.Cmdlet:
                value = 'c';
                goto IL_52;

            case ManagementRoleEntryType.Script:
                value = 's';
                goto IL_52;

            case ManagementRoleEntryType.Cmdlet | ManagementRoleEntryType.Script:
                break;

            case ManagementRoleEntryType.ApplicationPermission:
                value = 'a';
                goto IL_52;

            default:
                if (type == ManagementRoleEntryType.WebService)
                {
                    value = 'w';
                    goto IL_52;
                }
                break;
            }
            throw new ArgumentOutOfRangeException("type");
IL_52:
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append(value);
            stringBuilder.Append(',');
            stringBuilder.Append(name);
            if (type == ManagementRoleEntryType.Cmdlet && !string.IsNullOrEmpty(snapinName))
            {
                stringBuilder.Append(',');
                stringBuilder.Append(snapinName);
            }
            stringBuilder.Append(',');
            stringBuilder.Append('*');
            stringBuilder.Replace('?', '*');
            return(RBACHelper.ConstructRoleEntryFilter(stringBuilder.ToString()));
        }
예제 #3
0
        internal static QueryFilter ConstructRoleEntryParameterFilter(string[] parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            List <QueryFilter> list = new List <QueryFilter>(parameters.Length);

            foreach (string value in parameters)
            {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append('*');
                stringBuilder.Append(',');
                stringBuilder.Append(value);
                stringBuilder.Append('*');
                stringBuilder.Replace('?', '*');
                list.Add(RBACHelper.ConstructRoleEntryFilter(stringBuilder.ToString()));
            }
            return(new AndFilter(list.ToArray()));
        }
예제 #4
0
 internal static QueryFilter ConstructRoleEntryFilter(string name, ManagementRoleEntryType type)
 {
     return(RBACHelper.ConstructRoleEntryFilter(name, type, null));
 }