public void AddUserToGroupExecutorTest() { SCGroup group = SCObjectGenerator.PrepareGroupObject(); SCObjectOperations.Instance.AddGroup(group, SCOrganization.GetRoot()); SCUser user1 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot()); SCMemberRelation mr = SCObjectOperations.Instance.AddUserToGroup(user1, group); Assert.AreEqual(group.SchemaType, mr.ContainerSchemaType); Assert.AreEqual(user1.SchemaType, mr.MemberSchemaType); SCUser user2 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user2, SCOrganization.GetRoot()); SCObjectOperations.Instance.AddUserToGroup(user2, group); Assert.AreEqual(2, group.CurrentUsers.Count); Assert.IsTrue(group.CurrentUsers.ContainsKey(user1.ID)); Assert.IsTrue(group.CurrentUsers.ContainsKey(user2.ID)); Assert.IsTrue(user1.CurrentGroups.ContainsKey(group.ID)); Assert.IsTrue(user2.CurrentGroups.ContainsKey(group.ID)); SameContainerUserAndContainerSnapshotCollection ugSnapshot = UserAndContainerSnapshotAdapter.Instance.LoadByContainerID(group.ID); Assert.IsTrue(ugSnapshot.ContainsKey(user1.ID)); Assert.IsTrue(ugSnapshot.ContainsKey(user2.ID)); }
/// <summary> /// 删除 /// </summary> /// <param name="mr">成员关系</param> public void Delete(SCMemberRelation mr) { UserAndContainerSnapshot existedObj = this.GetExistedObject(mr); string sql = string.Empty; UserAndContainerSnapshot obj = new UserAndContainerSnapshot(mr); obj.Status = SchemaObjectStatus.Deleted; if (existedObj != null) { //如果已经存在,且状态是正常的 obj.VersionStartTime = existedObj.VersionStartTime; if (existedObj.Status == SchemaObjectStatus.Normal) { sql = this.PrepareUpdateSql(new UserAndContainerSnapshot[] { obj }); } } if (sql.IsNotEmpty()) { using (TransactionScope scope = TransactionScopeFactory.Create()) { DateTime dt = (DateTime)DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); SCActionContext.Current.TimePoint.IsMinValue(() => SCActionContext.Current.TimePoint = dt); scope.Complete(); } } }
public void AddOrRemoveUserToGroupExecutorTest() { SCGroup group = SCObjectGenerator.PrepareGroupObject(); SCObjectOperations.Instance.AddGroup(group, SCOrganization.GetRoot()); SCUser user1 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot()); Console.WriteLine("UserID: {0}, GroupID: {1}", user1.ID, group.ID); SCMemberRelation mr = SCObjectOperations.Instance.AddUserToGroup(user1, group); SCObjectOperations.Instance.RemoveUserFromGroup(user1, group); // 确认删除 Assert.IsFalse(group.CurrentMembersRelations.ContainsKey(user1.ID)); Assert.IsFalse(user1.CurrentMemberOfRelations.ContainsKey(group.ID)); SCObjectOperations.Instance.AddUserToGroup(user1, group); // 重置数据 group.ClearRelativeData(); user1.ClearRelativeData(); // 确认又加回来了 Assert.IsTrue(group.CurrentUsers.ContainsKey(user1.ID)); Assert.IsTrue(user1.CurrentGroups.ContainsKey(group.ID)); Console.WriteLine("UserID: {0}, GroupID: {1}", user1.ID, group.ID); }
private void RelationAssert(SCMemberRelation obj1, SCRelationObject obj2) { Assert.IsNotNull(obj1); Assert.IsNotNull(obj2); Assert.IsTrue(obj1.GetType() == obj2.GetType()); Assert.IsTrue(obj2.VersionEndTime == obj1.VersionEndTime); Assert.IsTrue(obj2.VersionStartTime == obj1.VersionStartTime); Assert.IsTrue(obj2.SchemaType == obj1.SchemaType); Assert.IsTrue(obj2.CreateDate == obj1.CreateDate); if (obj2.Creator != null && obj1.Creator != null) { Assert.AreEqual(obj2.Creator.ID, obj1.Creator.ID); Assert.AreEqual(obj2.Creator.DisplayName, obj2.Creator.DisplayName); } else { Assert.AreEqual(obj2.Creator, obj1.Creator); //两者或者都为空 } Assert.IsTrue(obj1.ID == obj1.ID); Assert.IsTrue(obj2.Status == obj1.Status); foreach (string key in obj1.Properties.GetAllKeys()) { Assert.AreEqual(obj2.Properties[key].StringValue, obj1.Properties[key].StringValue); } }
public void RemoveUserFromRole(SCUser user, AdminUnit unit, AUSchemaRole role) { CheckUnitPermission(AUOperationType.RemoveUserFromRole, "EditRoleMembers", unit); SchemaObjectBase r = Adapters.AUSnapshotAdapter.Instance.LoadAURole(role.ID, unit.ID, true, DateTime.MinValue); if (r == null) { throw new AUObjectValidationException("没有找到此管理单元的角色,请尝试重新添加此角色"); } AUMemberRelativeExecutor executor = new AUMemberRelativeExecutor(AUOperationType.RemoveUserFromRole, r, user) { OverrideExistedRelation = true, SaveTargetData = false, NeedStatusCheck = false, NeedContainerStatusCheck = this.NeedValidationAndStatusCheck, }; executor.Relation.Status = SchemaObjectStatus.Deleted; SCMemberRelation result = null; ExecuteWithActions(AUOperationType.RemoveUserFromRole, () => SCActionContext.Current.DoActions(() => result = (SCMemberRelation)executor.Execute())); }
/// <summary> /// 使用指定的<see cref="SCMemberRelation"/>初始化<see cref="ItemAndContainerSnapshot"/>的新实例。 /// </summary> /// <param name="mr"></param> public ItemAndContainerSnapshot(SCMemberRelation mr) { this.ItemID = mr.ID; this.ItemSchemaType = mr.MemberSchemaType; this.ContainerID = mr.ContainerID; this.ContainerSchemaType = mr.ContainerSchemaType; }
private static void FillPropertiesFromPC(ClientSchemaMember clientObj, SCMemberRelation pcObj) { clientObj.ContainerID = pcObj.ContainerID; clientObj.ContainerSchemaType = pcObj.ContainerSchemaType; clientObj.MemberSchemaType = pcObj.MemberSchemaType; clientObj.ID = pcObj.ID; clientObj.SchemaType = pcObj.SchemaType; }
public void MergeUserInGroupExecutorTest() { // 准备4位用户。User1位状态不变,User2待删除,User3新增加,User4复活 SCGroup group = SCObjectGenerator.PrepareGroupObject(); SCObjectOperations.Instance.AddGroup(group, SCOrganization.GetRoot()); SCUser user1 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot()); SCMemberRelation mr = SCObjectOperations.Instance.AddUserToGroup(user1, group); Assert.AreEqual(group.SchemaType, mr.ContainerSchemaType); Assert.AreEqual(user1.SchemaType, mr.MemberSchemaType); SCUser user2 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user2, SCOrganization.GetRoot()); SCObjectOperations.Instance.AddUserToGroup(user2, group); SCUser user3 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user3, SCOrganization.GetRoot()); SCUser user4 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user4, SCOrganization.GetRoot()); SCObjectOperations.Instance.AddUserToGroup(user4, group); SCObjectOperations.Instance.RemoveUserFromGroup(user4, group); user4.Status = SchemaObjectStatus.Normal; SchemaObjectCollection needMergeUsers = new SchemaObjectCollection() { user1, user3, user4 }; UserAndContainerSnapshotAdapter.Instance.Merge(group.ID, group.SchemaType, needMergeUsers); Console.WriteLine("Group ID: {0}", group.ID); SameContainerUserAndContainerSnapshotCollection ugSnapshot = UserAndContainerSnapshotAdapter.Instance.LoadByContainerID(group.ID); Assert.IsTrue(ugSnapshot.ContainsKey(user1.ID)); Assert.AreEqual(SchemaObjectStatus.Normal, ugSnapshot[user1.ID].Status); Assert.IsTrue(ugSnapshot.ContainsKey(user2.ID)); Assert.AreEqual(SchemaObjectStatus.Deleted, ugSnapshot[user2.ID].Status); Assert.IsTrue(ugSnapshot.ContainsKey(user3.ID)); Assert.AreEqual(SchemaObjectStatus.Normal, ugSnapshot[user3.ID].Status); Assert.IsTrue(ugSnapshot.ContainsKey(user4.ID)); Assert.AreEqual(SchemaObjectStatus.Normal, ugSnapshot[user4.ID].Status); }
public AddMemberAction(SchemaObjectBase container, SchemaObjectBase member) { this.container = container; this.member = member; this.relation = new SCMemberRelation(container, member); if (member.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal) { relation.Status = Schemas.SchemaProperties.SchemaObjectStatus.Deleted; } }
/// <summary> /// 使用容器,成员和指定的初始化类型初始化 /// </summary> /// <param name="container"></param> /// <param name="member"></param> /// <param name="delayInitialize">为true时,关系将延迟到执行前初始化</param> public RemoveMemberAction(SchemaObjectBase container, SchemaObjectBase member, bool delayInitialize) { this.container = container; this.member = member; this.delayed = delayInitialize; if (delayed == false) { this.relation = (SCMemberRelation)SCMemberRelationAdapter.Instance.Load(container.ID, member.ID); if (this.relation == null) { throw new Exception("关系尚不存在。"); } } }
public static ClientSchemaMember ToClientSchemaObject(this SCMemberRelation pcMember) { pcMember.NullCheck("pcRelation"); var result = new ClientSchemaMember(); result.ContainerID = pcMember.ContainerID; result.ID = pcMember.ID; result.ContainerSchemaType = pcMember.ContainerSchemaType; result.MemberSchemaType = pcMember.MemberSchemaType; result.InnerSort = pcMember.InnerSort; FillCommon(pcMember, result); return(result); }
public void Persist(VersionedSchemaObjectBase obj) { if (SCActionContext.Current.Context.ContainsKey("UserAndContainerSnapshotRelation")) { SCMemberRelation mr = (SCMemberRelation)SCActionContext.Current.Context["UserAndContainerSnapshotRelation"]; if (mr.Status == SchemaObjectStatus.Normal) { UserAndContainerSnapshotAdapter.Instance.Insert(mr); } else { UserAndContainerSnapshotAdapter.Instance.Delete(mr); } } }
public SCMemberRelation AddMemberToRole(SCBase member, SCRole role) { SCMemberRelativeExecutor executor = new SCMemberRelativeExecutor(SCOperationType.AddMemberToRole, role, member) { NeedStatusCheck = this.NeedValidationAndStatusCheck, NeedContainerStatusCheck = this.NeedValidationAndStatusCheck }; if (this._NeedCheckPermissions) { CheckApplicationMemberPermissions(SCOperationType.AddMemberToRole, "ModifyMembersInRoles", role); } SCMemberRelation result = null; ExecuteWithActions(SCOperationType.AddMemberToRole, () => SCActionContext.Current.DoActions(() => result = (SCMemberRelation)executor.Execute())); return(result); }
public SCMemberRelation AddUserToGroup(SCUser user, SCGroup group) { SCMemberRelativeExecutor executor = new SCMemberRelativeExecutor(SCOperationType.AddUserToGroup, group, user) { NeedStatusCheck = this.NeedValidationAndStatusCheck, NeedContainerStatusCheck = this.NeedValidationAndStatusCheck }; if (this._NeedCheckPermissions) { CheckOrganizationChildrenPermissions(SCOperationType.AddUserToGroup, "EditMembersOfGroups", group); } SCMemberRelation result = null; ExecuteWithActions(SCOperationType.AddUserToGroup, () => SCActionContext.Current.DoActions(() => result = (SCMemberRelation)executor.Execute())); return(result); }
public void DoAction() { if (delayed) { this.relation = (SCMemberRelation)SCMemberRelationAdapter.Instance.Load(container.ID, member.ID); if (this.relation == null) { throw new Exception("关系尚不存在。"); } } using (TransactionScope scope = TransactionScopeFactory.Create()) { SCMemberRelationAdapter.Instance.UpdateStatus(this.relation, Schemas.SchemaProperties.SchemaObjectStatus.Deleted); SchemaObjectAdapter.Instance.UpdateStatus(this.member, Schemas.SchemaProperties.SchemaObjectStatus.Deleted); scope.Complete(); } }
public void Prepare(VersionedSchemaObjectBase obj) { if (obj is SCMemberRelation) { SCMemberRelation mr = (SCMemberRelation)obj; ObjectSchemaConfigurationElement containerConfig = SchemaDefine.GetSchemaConfig(mr.ContainerSchemaType); ObjectSchemaConfigurationElement memberConfig = SchemaDefine.GetSchemaConfig(mr.MemberSchemaType); if (containerConfig != null && memberConfig != null) { if (containerConfig.Name == "AUAdminScopes" && memberConfig.Category == "AUScopeItems") { SCActionContext.Current.Context["ItemAndContainerSnapshotRelation"] = mr; } } } }
public SchemaObjectBase AddPermission(SCPermission permission, SCApplication application) { SCMemberRelativeExecutor executor = new SCMemberRelativeExecutor(SCOperationType.AddPermission, application, permission) { NeedValidation = this.NeedValidationAndStatusCheck, SaveTargetData = true, NeedContainerStatusCheck = this.NeedValidationAndStatusCheck }; if (this._NeedCheckPermissions) { CheckPermissions(SCOperationType.AddPermission, application.Schema, "AddPermissions", application.ID); } SCMemberRelation result = null; ExecuteWithActions(SCOperationType.AddPermission, () => SCActionContext.Current.DoActions(() => result = (SCMemberRelation)executor.Execute())); return(result); }
public void Prepare(VersionedSchemaObjectBase obj) { if (obj is SCMemberRelation) { SCMemberRelation mr = (SCMemberRelation)obj; ObjectSchemaConfigurationElement containerConfig = SchemaDefine.GetSchemaConfig(mr.ContainerSchemaType); ObjectSchemaConfigurationElement memberConfig = SchemaDefine.GetSchemaConfig(mr.MemberSchemaType); if (containerConfig != null && memberConfig != null) { if (containerConfig.IsUsersContainer && memberConfig.IsUsersContainerMember) { SCActionContext.Current.Context["UserAndContainerSnapshotRelation"] = mr; } } } }
public SCMemberRelation RemoveUserFromGroup(SCUser user, SCGroup group) { SCMemberRelativeExecutor executor = new SCMemberRelativeExecutor(SCOperationType.RemoveUserFromGroup, group, user) { OverrideExistedRelation = true, NeedStatusCheck = this.NeedValidationAndStatusCheck, NeedContainerStatusCheck = this.NeedValidationAndStatusCheck }; if (this._NeedCheckPermissions) { CheckOrganizationChildrenPermissions(SCOperationType.RemoveUserFromGroup, "EditMembersOfGroups", group); } executor.Relation.Status = SchemaObjectStatus.Deleted; SCMemberRelation result = null; ExecuteWithActions(SCOperationType.RemoveUserFromGroup, () => SCActionContext.Current.DoActions(() => result = (SCMemberRelation)executor.Execute())); return(result); }
public SCMemberRelation RemoveMemberFromRole(SCBase member, SCRole role) { SCMemberRelativeExecutor executor = new SCMemberRelativeExecutor(SCOperationType.RemoveMemberFromRole, role, member) { OverrideExistedRelation = true, NeedStatusCheck = this.NeedValidationAndStatusCheck, NeedContainerStatusCheck = this.NeedValidationAndStatusCheck }; if (this._NeedCheckPermissions) { CheckApplicationMemberPermissions(SCOperationType.RemoveMemberFromRole, "ModifyMembersInRoles", role); } executor.Relation.Status = SchemaObjectStatus.Deleted; SCMemberRelation result = null; ExecuteWithActions(SCOperationType.RemoveMemberFromRole, () => SCActionContext.Current.DoActions(() => result = (SCMemberRelation)executor.Execute())); return(result); }
public void TestSerializeMemberRelation() { System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var role = SCObjectGenerator.PrepareRoleObject(); var user = SCObjectGenerator.PrepareUserObject(); var obj1 = new SCMemberRelation(role, user); obj1.CreateDate = DateTime.Now; obj1.VersionEndTime = new DateTime(567890); obj1.VersionEndTime = DateTime.MaxValue; obj1.ID = MCS.Library.Core.UuidHelper.NewUuidString(); obj1.InnerSort = 23; obj1.Status = SchemaObjectStatus.Deleted; System.IO.MemoryStream ms = new System.IO.MemoryStream(); bf.Serialize(ms, obj1); ms.Seek(0, System.IO.SeekOrigin.Begin); var obj2 = (SCMemberRelation)bf.Deserialize(ms); RelationAssert(obj1, obj2); }
public void QueryGroupMembersTest() { SCGroup group = SCObjectGenerator.PrepareGroupObject(); SCObjectOperations.Instance.AddGroup(group, SCOrganization.GetRoot()); SCUser user1 = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot()); SCMemberRelation mr = SCObjectOperations.Instance.AddUserToGroup(user1, group); SCObjectAndRelationCollection result = SCSnapshotAdapter.Instance.QueryContainerContainsUsersByIDs(new string[] { "Groups" }, new string[] { group.ID }, false, DateTime.MinValue); Assert.IsTrue(result.Count > 0); result.FillDetails(); Console.WriteLine(result[0].Detail.Properties.GetValue("Name", string.Empty)); Console.WriteLine(result[0].ParentID); Assert.AreEqual(user1.ID, result[0].Detail.ID); }
private UserAndContainerSnapshot GetExistedObject(SCMemberRelation mr) { UserAndContainerSnapshot condition = new UserAndContainerSnapshot(mr); WhereSqlClauseBuilder keyBuilder = ORMapping.GetWhereSqlClauseBuilderByPrimaryKey(condition, this.GetMappingInfo()); string sql = string.Format("SELECT TOP 1 {0} FROM {1} WHERE {2} ORDER BY VersionStartTime DESC", string.Join(",", ORMapping.GetSelectFieldsName(this.GetMappingInfo())), this.GetLoadingTableName(DateTime.MinValue), keyBuilder.ToSqlString(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0]; UserAndContainerSnapshot result = null; if (table.Rows.Count > 0) { result = new UserAndContainerSnapshot(); ORMapping.DataRowToObject(table.Rows[0], result); } return(result); }
public EnableMemberAction(SchemaObjectBase container, SchemaObjectBase member) { this.container = container; this.member = member; this.relation = (SCMemberRelation)SCMemberRelationAdapter.Instance.Load(container.ID, member.ID); }
public AddRelationAction(SchemaObjectBase container, SchemaObjectBase member) { this.relation = new SCMemberRelation(container, member); }
public EnableMemberAction(SchemaObjectBase container, SchemaObjectBase member) { this.container = container; this.member = member; this.relation = (SCMemberRelation)SCMemberRelationAdapter.Instance.Load(container.ID, member.ID); }
private ItemAndContainerSnapshot GetExistedObject(SCMemberRelation mr) { ItemAndContainerSnapshot condition = new ItemAndContainerSnapshot(mr); WhereSqlClauseBuilder keyBuilder = ORMapping.GetWhereSqlClauseBuilderByPrimaryKey(condition, this.GetMappingInfo()); string sql = string.Format("SELECT TOP 1 {0} FROM {1} WHERE {2} ORDER BY VersionStartTime DESC", string.Join(",", ORMapping.GetSelectFieldsName(this.GetMappingInfo())), this.GetLoadingTableName(DateTime.MinValue), keyBuilder.ToSqlString(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0]; ItemAndContainerSnapshot result = null; if (table.Rows.Count > 0) { result = new ItemAndContainerSnapshot(); ORMapping.DataRowToObject(table.Rows[0], result); } return result; }
/// <summary> /// 删除 /// </summary> /// <param name="mr">成员关系</param> public void Delete(SCMemberRelation mr) { ItemAndContainerSnapshot existedObj = this.GetExistedObject(mr); string sql = string.Empty; ItemAndContainerSnapshot obj = new ItemAndContainerSnapshot(mr); obj.Status = SchemaObjectStatus.Deleted; if (existedObj != null) { //如果已经存在,且状态是正常的 obj.VersionStartTime = existedObj.VersionStartTime; if (existedObj.Status == SchemaObjectStatus.Normal) { sql = this.PrepareUpdateSql(new ItemAndContainerSnapshot[] { obj }); } } if (sql.IsNotEmpty()) { using (TransactionScope scope = TransactionScopeFactory.Create()) { DateTime dt = (DateTime)DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName()); SCActionContext.Current.TimePoint.IsMinValue(() => SCActionContext.Current.TimePoint = dt); scope.Complete(); } } }
public AddRelationAction(SchemaObjectBase container, SchemaObjectBase member) { this.relation = new SCMemberRelation(container, member); }