Beispiel #1
0
        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));
        }
Beispiel #2
0
        /// <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();
                }
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
        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()));
        }
Beispiel #6
0
        /// <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;
        }
Beispiel #7
0
 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;
 }
Beispiel #8
0
        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;
            }
        }
Beispiel #10
0
 /// <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("关系尚不存在。");
         }
     }
 }
Beispiel #11
0
        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);
                }
            }
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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();
            }
        }
Beispiel #16
0
        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;
                    }
                }
            }
        }
Beispiel #17
0
        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;
                    }
                }
            }
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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);
        }
Beispiel #21
0
        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);
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        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();
				}
			}
		}
Beispiel #29
0
 public AddRelationAction(SchemaObjectBase container, SchemaObjectBase member)
 {
     this.relation = new SCMemberRelation(container, member);
 }