Esempio n. 1
0
        public void UpdateConditionTest()
        {
            string ownerID = UuidHelper.NewUuidString();

            SCConditionCollection conditions = new SCConditionCollection();

            conditions.Add(new SCCondition()
            {
                OwnerID = ownerID, SortID = 0, Condition = "Users.Status == 1"
            });
            conditions.Add(new SCCondition()
            {
                OwnerID = ownerID, SortID = 1, Condition = "Users.Status == 3"
            });

            SCConditionAdapter.Instance.UpdateConditions(ownerID, "Default", conditions);

            SCConditionOwner owner = SCConditionAdapter.Instance.Load(ownerID);

            Assert.AreEqual(ownerID, owner.OwnerID);
            Assert.AreEqual(conditions.Count, owner.Conditions.Count);

            for (int i = 0; i < owner.Conditions.Count; i++)
            {
                Assert.AreEqual(conditions[i].OwnerID, owner.Conditions[i].OwnerID);
                Assert.AreEqual(conditions[i].Condition, owner.Conditions[i].Condition);
            }
        }
Esempio n. 2
0
        public void SimpleConditionTest()
        {
            SCConditionOwner owner = new SCConditionOwner();

            SCUser user1 = SCObjectGenerator.PrepareUserObject();

            SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot());

            SCUser user2 = SCObjectGenerator.PrepareUserObject();

            SCObjectOperations.Instance.AddUser(user2, SCOrganization.GetRoot());

            owner.OwnerID = UuidHelper.NewUuidString();

            string expression = string.Format("Users.CodeName == \"{0}\"", user2.CodeName);

            owner.Conditions.Add(new SCCondition()
            {
                Description = "基本测试", Condition = expression
            });

            SCConditionCalculator calculator = new SCConditionCalculator();

            IEnumerable <SchemaObjectBase> result = calculator.Calculate(owner);

            Assert.AreEqual(1, result.Count());

            foreach (SchemaObjectBase obj in result)
            {
                Console.WriteLine("ID:{0}, Name: {1}", obj.ID, obj.Properties.GetValue("Name", string.Empty));
            }
        }
		public SCUpdateConditionsExecutor(SCOperationType opType, SCConditionOwner owner)
			: base(opType)
		{
			owner.NullCheck("owner");

			this._Owner = owner;
		}
Esempio n. 4
0
        public void DuplicateUpdateConditionTest()
        {
            string ownerID = UuidHelper.NewUuidString();

            SCConditionCollection conditions = new SCConditionCollection();

            conditions.Add(new SCCondition()
            {
                OwnerID = ownerID, SortID = 0, Condition = "Users.Status == 1"
            });
            conditions.Add(new SCCondition()
            {
                OwnerID = ownerID, SortID = 1, Condition = "Users.Status == 3"
            });

            DBTimePointActionContext.Current.DoActions(() => SCConditionAdapter.Instance.UpdateConditions(ownerID, "Default", conditions));

            SCConditionOwner originalOwner = SCConditionAdapter.Instance.Load(ownerID);

            conditions.RemoveAt(1);
            conditions[0].Condition = "Users.Status == 2";

            DBTimePointActionContext.Current.DoActions(() => SCConditionAdapter.Instance.UpdateConditions(ownerID, "Default", conditions));

            SCConditionOwner oldOwner = SCConditionAdapter.Instance.Load(ownerID, string.Empty, originalOwner.Conditions[0].VersionStartTime);

            Assert.AreEqual(2, oldOwner.Conditions.Count);
            Assert.AreEqual(originalOwner.Conditions[0].Condition, oldOwner.Conditions[0].Condition);

            SCConditionOwner newOwner = SCConditionAdapter.Instance.Load(ownerID);

            Assert.AreEqual(1, newOwner.Conditions.Count);
            Assert.AreEqual(conditions[0].Condition, newOwner.Conditions[0].Condition);
        }
Esempio n. 5
0
        public SCUpdateConditionsExecutor(SCOperationType opType, SCConditionOwner owner)
            : base(opType)
        {
            owner.NullCheck("owner");

            this._Owner = owner;
        }
		public void SimpleConditionTest()
		{
			SCConditionOwner owner = new SCConditionOwner();

			SCUser user1 = SCObjectGenerator.PrepareUserObject();

			SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot());

			SCUser user2 = SCObjectGenerator.PrepareUserObject();

			SCObjectOperations.Instance.AddUser(user2, SCOrganization.GetRoot());

			owner.OwnerID = UuidHelper.NewUuidString();

			string expression = string.Format("Users.CodeName == \"{0}\"", user2.CodeName);

			owner.Conditions.Add(new SCCondition() { Description = "基本测试", Condition = expression });

			SCConditionCalculator calculator = new SCConditionCalculator();

			IEnumerable<SchemaObjectBase> result = calculator.Calculate(owner);

			Assert.AreEqual(1, result.Count());

			foreach (SchemaObjectBase obj in result)
			{
				Console.WriteLine("ID:{0}, Name: {1}", obj.ID, obj.Properties.GetValue("Name", string.Empty));
			}
		}
Esempio n. 7
0
        /// <summary>
        /// 更新角色的条件
        /// </summary>
        /// <param name="owner"></param>
        /// <returns></returns>
        public SCConditionOwner UpdateRoleConditions(SCConditionOwner owner)
        {
            SCUpdateConditionsExecutor executor = new SCUpdateConditionsExecutor(SCOperationType.UpdateRoleConditions, owner);

            if (this._NeedCheckPermissions)
            {
                CheckApplicationMemberPermissions(SCOperationType.UpdateRoleConditions, "ModifyMembersInRoles", owner.OwnerID);
            }

            SCConditionOwner result = null;

            ExecuteWithActions(SCOperationType.UpdateRoleConditions, () => SCActionContext.Current.DoActions(() => result = (SCConditionOwner)executor.Execute()));

            return(result);
        }
Esempio n. 8
0
        /// <summary>
        /// 更新群组的条件
        /// </summary>
        /// <param name="owner"></param>
        /// <returns></returns>
        public SCConditionOwner UpdateGroupConditions(SCConditionOwner owner)
        {
            SCUpdateConditionsExecutor executor = new SCUpdateConditionsExecutor(SCOperationType.UpdateGroupConditions, owner);

            if (this._NeedCheckPermissions)
            {
                CheckOrganizationChildrenPermissions(SCOperationType.UpdateGroupConditions, "EditMembersOfGroups", owner.OwnerID);
            }

            SCConditionOwner result = null;

            ExecuteWithActions(SCOperationType.UpdateGroupConditions, () => SCActionContext.Current.DoActions(() => result = (SCConditionOwner)executor.Execute()));

            return(result);
        }
Esempio n. 9
0
        public void DeleteConditionsContainerTest()
        {
            SCUser userInGroup;
            SCUser userNotInGroup;

            SCGroup group = SCObjectGenerator.PrepareGroupWithConditions(out userInGroup, out userNotInGroup);

            Console.WriteLine("Group ID: {0}", group.ID);

            SCObjectOperations.Instance.DeleteGroup(group, null, false);

            SCConditionOwner owner = SCConditionAdapter.Instance.Load(group.ID);

            owner.Conditions.ForEach(c => Assert.AreEqual(SchemaObjectStatus.Deleted, c.Status));
        }
Esempio n. 10
0
        public void SimpleGroupConditionsTest()
        {
            SCUser userInGroup;
            SCUser userNotInGroup;

            SCGroup group = SCObjectGenerator.PrepareGroupWithConditions(out userInGroup, out userNotInGroup);

            SCConditionCalculator calculator = new SCConditionCalculator();

            SCConditionOwner owner = SCConditionAdapter.Instance.Load(group.ID, string.Empty);

            SchemaObjectCollection calculateResult = calculator.Calculate(owner);

            ConditionCalculateResultAdapter.Instance.Update(group.ID, calculateResult);

            SchemaObjectCollection loadedResult = ConditionCalculateResultAdapter.Instance.LoadCurrentUsers(group.ID);

            Assert.IsTrue(loadedResult.ContainsKey(userInGroup.ID));
            Assert.IsFalse(loadedResult.ContainsKey(userNotInGroup.ID));
        }
Esempio n. 11
0
        public static SCGroup PrepareGroupWithConditions(out SCUser userInGroup, out SCUser userNotInGroup)
        {
            userInGroup = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(userInGroup, SCOrganization.GetRoot());

            userNotInGroup = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(userNotInGroup, SCOrganization.GetRoot());

            SCGroup group = PrepareGroupObject();

            SCObjectOperations.Instance.AddGroup(group, SCOrganization.GetRoot());

            SCConditionOwner owner = new SCConditionOwner();

            owner.OwnerID = group.ID;
            owner.Conditions.Add(new SCCondition(string.Format("Users.CodeName == \"{0}\"", userInGroup.CodeName)));

            SCConditionAdapter.Instance.UpdateConditions(owner);

            return(group);
        }
Esempio n. 12
0
        public void UpdateRoleRoleConditionTest()
        {
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role = SCObjectGenerator.PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(role, application);

            SCConditionOwner owner = new SCConditionOwner()
            {
                OwnerID = role.ID
            };

            owner.Conditions.Add(new SCCondition()
            {
                OwnerID = role.ID, SortID = 0, Condition = "Users.Status == 1"
            });
            owner.Conditions.Add(new SCCondition()
            {
                OwnerID = role.ID, SortID = 1, Condition = "Users.Status == 3"
            });

            SCObjectOperations.Instance.UpdateRoleConditions(owner);

            SCConditionOwner ownerLoaded = SCConditionAdapter.Instance.Load(role.ID);

            Assert.AreEqual(owner.OwnerID, ownerLoaded.OwnerID);
            Assert.AreEqual("Default", ownerLoaded.Type);

            Assert.AreEqual(owner.Conditions.Count, ownerLoaded.Conditions.Count);

            for (int i = 0; i < owner.Conditions.Count; i++)
            {
                Assert.AreEqual(owner.Conditions[i].OwnerID, ownerLoaded.Conditions[i].OwnerID);
                Assert.AreEqual(owner.Conditions[i].Condition, ownerLoaded.Conditions[i].Condition);
            }
        }
Esempio n. 13
0
        /// <summary>
        /// 根据ownerID和type加载ConditionOwner对象
        /// </summary>
        /// <param name="ownerID"></param>
        /// <param name="type"></param>
        /// <param name="timePoint"></param>
        /// <returns></returns>
        public SCConditionOwner Load(string ownerID, string type, DateTime timePoint)
        {
            if (type.IsNullOrEmpty())
            {
                type = "Default";
            }

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("OwnerID", ownerID);
            builder.AppendItem("Type", type);

            SCConditionCollection conditions = this.Load(builder, timePoint);

            SCConditionOwner owner = new SCConditionOwner()
            {
                OwnerID = ownerID, Type = type
            };

            owner.Conditions.CopyFrom(conditions);

            return(owner);
        }
Esempio n. 14
0
        /// <summary>
        /// 准备一个包含一个人员、一个组织、一个群组的角色,群组和组织中各包含一个人
        /// </summary>
        /// <param name="userInOrg"></param>
        /// <param name="userInGroup"></param>
        /// <param name="userInRole"></param>
        /// <param name="testOrg"></param>
        /// <param name="group"></param>
        /// <returns></returns>
        public static TestRoleData PrepareTestRoleWithOrgAndGroup(Func <TestRoleData, string> builtInCondition)
        {
            TestRoleData result = new TestRoleData();

            string orgCodeName = UuidHelper.NewUuidString();

            result.Organization = PrepareOrganizationObject("RoleOrg-" + orgCodeName, orgCodeName);
            SCObjectOperations.Instance.AddOrganization(result.Organization, SCOrganization.GetRoot());

            result.UserInOrg = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(result.UserInOrg, result.Organization);

            string sidelineOrgCodeName = UuidHelper.NewUuidString();

            result.SidelineOrganization = PrepareOrganizationObject("RoleOrg-" + sidelineOrgCodeName, sidelineOrgCodeName);
            SCObjectOperations.Instance.AddOrganization(result.SidelineOrganization, SCOrganization.GetRoot());

            result.SidelineUserInOrg = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(result.SidelineUserInOrg, result.Organization);
            SCObjectOperations.Instance.AddUser(result.SidelineUserInOrg, result.SidelineOrganization);

            result.Group = PrepareGroupObject();
            SCObjectOperations.Instance.AddGroup(result.Group, SCOrganization.GetRoot());

            result.UserInGroup = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(result.UserInGroup, SCOrganization.GetRoot());
            SCObjectOperations.Instance.AddUserToGroup(result.UserInGroup, result.Group);

            result.UserInConditionGroup = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(result.UserInConditionGroup, SCOrganization.GetRoot());

            SCConditionOwner groupOwner = new SCConditionOwner();

            groupOwner.OwnerID = result.Group.ID;
            groupOwner.Conditions.Add(new SCCondition(string.Format("Users.CodeName == \"{0}\"", result.UserInConditionGroup.CodeName)));
            SCConditionAdapter.Instance.UpdateConditions(groupOwner);

            result.UserInRole = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(result.UserInRole, SCOrganization.GetRoot());

            result.UserInConditionRole = PrepareUserObject();
            SCObjectOperations.Instance.AddUser(result.UserInConditionRole, SCOrganization.GetRoot());

            SCApplication app = PrepareSCObject <SCApplication>("应用Role", "应用" + UuidHelper.NewUuidString());

            SCObjectOperations.Instance.AddApplication(app);

            result.Role = PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(result.Role, app);
            SCObjectOperations.Instance.AddMemberToRole(result.UserInRole, result.Role);
            SCObjectOperations.Instance.AddMemberToRole(result.Organization, result.Role);
            SCObjectOperations.Instance.AddMemberToRole(result.Group, result.Role);

            SCConditionOwner roleOwner = new SCConditionOwner();

            roleOwner.OwnerID = result.Role.ID;

            //增加一条错误的条件,!=是非法运算符
            roleOwner.Conditions.Add(new SCCondition(string.Format("Users.CodeName != \"{0}\"", result.UserInConditionRole.CodeName)));
            roleOwner.Conditions.Add(new SCCondition(string.Format("Users.CodeName == \"{0}\"", result.UserInConditionRole.CodeName)));

            SCConditionAdapter.Instance.UpdateConditions(roleOwner);

            result.BuiltInFunctionRole = PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(result.BuiltInFunctionRole, app);

            string builtConditionExp = string.Empty;

            if (builtInCondition != null)
            {
                builtConditionExp = builtInCondition(result);
            }

            if (builtConditionExp.IsNotEmpty())
            {
                SCConditionOwner builtInRoleOwner = new SCConditionOwner();

                builtInRoleOwner.OwnerID = result.BuiltInFunctionRole.ID;

                builtInRoleOwner.Conditions.Add(new SCCondition(builtConditionExp));

                SCConditionAdapter.Instance.UpdateConditions(builtInRoleOwner);
            }

            return(result);
        }
Esempio n. 15
0
 /// <summary>
 /// 根据Owner删除条件
 /// </summary>
 /// <param name="ownerID"></param>
 /// <param name="type"></param>
 public void DeleteByOwner(SCConditionOwner owner)
 {
     this.UpdateConditions(owner.OwnerID, owner.Type, new SCConditionCollection());
 }
Esempio n. 16
0
 /// <summary>
 /// 修改条件
 /// </summary>
 /// <param name="owner"></param>
 public void UpdateConditions(SCConditionOwner owner)
 {
     this.UpdateConditions(owner.OwnerID, owner.Type, owner.Conditions);
 }
		/// <summary>
		/// 更新角色的条件
		/// </summary>
		/// <param name="owner"></param>
		/// <returns></returns>
		public SCConditionOwner UpdateRoleConditions(SCConditionOwner owner)
		{
			SCUpdateConditionsExecutor executor = new SCUpdateConditionsExecutor(SCOperationType.UpdateRoleConditions, owner);

			if (this._NeedCheckPermissions)
				CheckApplicationMemberPermissions(SCOperationType.UpdateRoleConditions, "ModifyMembersInRoles", owner.OwnerID);

			SCConditionOwner result = null;

			ExecuteWithActions(SCOperationType.UpdateRoleConditions, () => SCActionContext.Current.DoActions(() => result = (SCConditionOwner)executor.Execute()));

			return result;
		}
		/// <summary>
		/// 更新群组的条件
		/// </summary>
		/// <param name="owner"></param>
		/// <returns></returns>
		public SCConditionOwner UpdateGroupConditions(SCConditionOwner owner)
		{
			SCUpdateConditionsExecutor executor = new SCUpdateConditionsExecutor(SCOperationType.UpdateGroupConditions, owner);

			if (this._NeedCheckPermissions)
				CheckOrganizationChildrenPermissions(SCOperationType.UpdateGroupConditions, "EditMembersOfGroups", owner.OwnerID);

			SCConditionOwner result = null;

			ExecuteWithActions(SCOperationType.UpdateGroupConditions, () => SCActionContext.Current.DoActions(() => result = (SCConditionOwner)executor.Execute()));

			return result;
		}
Esempio n. 19
0
		public void UpdateRoleRoleConditionTest()
		{
			SCApplication application = SCObjectGenerator.PrepareApplicationObject();

			SCObjectOperations.Instance.AddApplication(application);

			SCRole role = SCObjectGenerator.PrepareRoleObject();

			SCObjectOperations.Instance.AddRole(role, application);

			SCConditionOwner owner = new SCConditionOwner() { OwnerID = role.ID };

			owner.Conditions.Add(new SCCondition() { OwnerID = role.ID, SortID = 0, Condition = "Users.Status == 1" });
			owner.Conditions.Add(new SCCondition() { OwnerID = role.ID, SortID = 1, Condition = "Users.Status == 3" });

			SCObjectOperations.Instance.UpdateRoleConditions(owner);

			SCConditionOwner ownerLoaded = SCConditionAdapter.Instance.Load(role.ID);

			Assert.AreEqual(owner.OwnerID, ownerLoaded.OwnerID);
			Assert.AreEqual("Default", ownerLoaded.Type);

			Assert.AreEqual(owner.Conditions.Count, ownerLoaded.Conditions.Count);

			for (int i = 0; i < owner.Conditions.Count; i++)
			{
				Assert.AreEqual(owner.Conditions[i].OwnerID, ownerLoaded.Conditions[i].OwnerID);
				Assert.AreEqual(owner.Conditions[i].Condition, ownerLoaded.Conditions[i].Condition);
			}
		}
		/// <summary>
		/// 计算一个Owner下的条件
		/// </summary>
		/// <param name="owner"></param>
		/// <param name="description">辅助描述信息,用于错误信息或输出日志</param>
		/// <returns></returns>
		public SchemaObjectCollection Calculate(SCConditionOwner owner, string description = "")
		{
			SchemaObjectCollection result = new SchemaObjectCollection();

			// 初始化基础数据,包括所有用户
			this.Context.EnsureInitialized();

			if (description.IsNullOrEmpty())
				description = owner.OwnerID;

			// 根据条件筛选结果
			this.Context.ExecutionWrapper(string.Format("计算{0}的条件", description),
				() => this.FilterUsersByConditions(owner.Conditions, result, description));

			return result;
		}