Esempio n. 1
0
        internal void BuildIncrementalRoleLink(PolicyOperation policyOperation, IEnumerable <string> rule)
        {
            int count = Value.Count(c => c is '_');

            if (count < 2)
            {
                throw new InvalidOperationException("the number of \"_\" in role definition should be at least 2.");
            }

            BuildRoleLink(count, policyOperation, rule);
        }
Esempio n. 2
0
        /// <summary>
        /// Provides incremental build the role inheritance relations.
        /// </summary>
        /// <param name="policyOperation"></param>
        /// <param name="section"></param>
        /// <param name="policyType"></param>
        /// <param name="rules"></param>
        public void BuildIncrementalRoleLinks(PolicyOperation policyOperation,
                                              string section, string policyType, IEnumerable <IEnumerable <string> > rules)
        {
            if (Model.ContainsKey(PermConstants.Section.RoleSection) is false)
            {
                return;
            }

            Assertion assertion = GetExistAssertion(section, policyType);

            assertion.BuildIncrementalRoleLinks(policyOperation, rules);
        }
Esempio n. 3
0
        internal void BuildIncrementalRoleLinks(IRoleManager roleManager,
                                                PolicyOperation policyOperation, IEnumerable <IEnumerable <string> > rules)
        {
            RoleManager = roleManager;
            int count = Value.Count(c => c is '_');

            if (count < 2)
            {
                throw new InvalidOperationException("the number of \"_\" in role definition should be at least 2.");
            }

            foreach (var rule in rules)
            {
                BuildRoleLink(roleManager, count, policyOperation, rule);
            }
        }
Esempio n. 4
0
 public void BuildIncrementalRoleLink(IRoleManager roleManager, PolicyOperation policyOperation,
                                      string section, string policyType, IEnumerable <string> rule)
 {
     BuildIncrementalRoleLink(policyOperation, section, policyType, rule);
 }
Esempio n. 5
0
        private static void BuildRoleLink(IRoleManager roleManager, int groupPolicyCount,
                                          PolicyOperation policyOperation, IEnumerable <string> rule)
        {
            List <string> ruleEnum  = rule as List <string> ?? rule.ToList();
            int           ruleCount = ruleEnum.Count;

            if (ruleCount < groupPolicyCount)
            {
                throw new InvalidOperationException("Grouping policy elements do not meet role definition.");
            }

            if (ruleCount > groupPolicyCount)
            {
                ruleEnum = ruleEnum.GetRange(0, groupPolicyCount);
            }

            switch (policyOperation)
            {
            case PolicyOperation.PolicyAdd:
                switch (groupPolicyCount)
                {
                case 2:
                    roleManager.AddLink(ruleEnum[0], ruleEnum[1]);
                    break;

                case 3:
                    roleManager.AddLink(ruleEnum[0], ruleEnum[1], ruleEnum[2]);
                    break;

                case 4:
                    roleManager.AddLink(ruleEnum[0], ruleEnum[1],
                                        ruleEnum[2], ruleEnum[3]);
                    break;

                default:
                    roleManager.AddLink(ruleEnum[0], ruleEnum[1],
                                        ruleEnum.GetRange(2, groupPolicyCount - 2).ToArray());
                    break;
                }
                break;

            case PolicyOperation.PolicyRemove:
                switch (groupPolicyCount)
                {
                case 2:
                    roleManager.DeleteLink(ruleEnum[0], ruleEnum[1]);
                    break;

                case 3:
                    roleManager.DeleteLink(ruleEnum[0], ruleEnum[1], ruleEnum[2]);
                    break;

                case 4:
                    roleManager.DeleteLink(ruleEnum[0], ruleEnum[1],
                                           ruleEnum[2], ruleEnum[3]);
                    break;

                default:
                    roleManager.DeleteLink(ruleEnum[0], ruleEnum[1],
                                           ruleEnum.GetRange(2, groupPolicyCount - 2).ToArray());
                    break;
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(policyOperation), policyOperation, null);
            }
        }