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); } }
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; }
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); }
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)); } }
/// <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); }
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)); }
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)); }
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); }
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> /// 根据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); }
/// <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); }
/// <summary> /// 根据Owner删除条件 /// </summary> /// <param name="ownerID"></param> /// <param name="type"></param> public void DeleteByOwner(SCConditionOwner owner) { this.UpdateConditions(owner.OwnerID, owner.Type, new SCConditionCollection()); }
/// <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; }
/// <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; }