Ejemplo n.º 1
0
        public ClientAURole GetAURoleBySchemaRoleID(string unitID, string schemaRoleID, bool normalOnly)
        {
            unitID.NullCheck("unitID"); schemaRoleID.NullCheck("schemaRoleID");
            AURole result = null;
            var    unit   = AUCommon.DoDbProcess(() =>
                                                 (AdminUnit)SchemaObjectAdapter.Instance.Load(unitID));

            if (unit != null && normalOnly)
            {
                unit = unit.Status == SchemaObjectStatus.Normal ? unit : null;
            }

            if (unit != null)
            {
                var schemaRole = (AUSchemaRole)AUCommon.DoDbProcess(() => SchemaObjectAdapter.Instance.Load(schemaRoleID));
                if (schemaRole != null && normalOnly)
                {
                    schemaRole = schemaRole.Status == SchemaObjectStatus.Normal ? schemaRole : null;
                }

                if (schemaRole != null)
                {
                    result = AUSnapshotAdapter.Instance.LoadAURole(schemaRole.ID, unitID, normalOnly, SimpleRequestSoapMessage.Current.TimePoint);
                }
            }

            return(result != null ? (ClientAURole)result.ToClientSchemaObject() : null);
        }
Ejemplo n.º 2
0
        protected override void PrepareData(AUObjectOperationContext context)
        {
            AUCommon.DoDbAction(() =>
            {
                actualSchemaRole = (AUSchemaRole)SchemaObjectAdapter.Instance.Load(schemaRole.ID);
                if (actualSchemaRole.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal)
                {
                    throw new AUStatusCheckException(actualSchemaRole, this.OperationType);
                }

                this.actualUnit = (AdminUnit)SchemaObjectAdapter.Instance.Load(this.unit.ID);
                if (this.actualUnit == null || this.actualUnit.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal)
                {
                    throw new AUStatusCheckException(actualUnit, this.OperationType);
                }

                this.actualUnitRole = Adapters.AUSnapshotAdapter.Instance.LoadAURole(actualSchemaRole.ID, actualUnit.ID, true, DateTime.MinValue);
                if (actualUnitRole == null || actualUnitRole.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal)
                {
                    throw new AUStatusCheckException(actualUnitRole, this.OperationType);
                }

                var roleMemberRelations = SCMemberRelationAdapter.Instance.LoadByContainerID(this.actualUnitRole.ID);

                Dictionary <string, SCUser> userDic = users.ToDictionary(m => m.ID);

                foreach (var item in roleMemberRelations)
                {
                    if (item.Status == Schemas.SchemaProperties.SchemaObjectStatus.Normal)
                    {
                        if (userDic.ContainsKey(item.ID))
                        {
                            userDic.Remove(item.ID);
                        }
                        else
                        {
                            pendingActions.Add(new RemoveRelationAction(item));
                        }
                    }
                }

                foreach (SCUser user in userDic.Values)
                {
                    pendingActions.Add(new AddRelationAction(this.actualUnitRole, user));
                }
            });
        }
		protected override void PrepareData(AUObjectOperationContext context)
		{
			AUCommon.DoDbAction(() =>
			{
				actualSchemaRole = (AUSchemaRole)SchemaObjectAdapter.Instance.Load(schemaRole.ID);
				if (actualSchemaRole.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal)
					throw new AUStatusCheckException(actualSchemaRole, this.OperationType);

				this.actualUnit = (AdminUnit)SchemaObjectAdapter.Instance.Load(this.unit.ID);
				if (this.actualUnit == null || this.actualUnit.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal)
					throw new AUStatusCheckException(actualUnit, this.OperationType);

				this.actualUnitRole = Adapters.AUSnapshotAdapter.Instance.LoadAURole(actualSchemaRole.ID, actualUnit.ID, true, DateTime.MinValue);
				if (actualUnitRole == null || actualUnitRole.Status != Schemas.SchemaProperties.SchemaObjectStatus.Normal)
					throw new AUStatusCheckException(actualUnitRole, this.OperationType);

				var roleMemberRelations = SCMemberRelationAdapter.Instance.LoadByContainerID(this.actualUnitRole.ID);

				Dictionary<string, SCUser> userDic = users.ToDictionary(m => m.ID);

				foreach (var item in roleMemberRelations)
				{
					if (item.Status == Schemas.SchemaProperties.SchemaObjectStatus.Normal)
					{
						if (userDic.ContainsKey(item.ID))
						{
							userDic.Remove(item.ID);
						}
						else
						{
							pendingActions.Add(new RemoveRelationAction(item));
						}
					}
				}

				foreach (SCUser user in userDic.Values)
				{
					pendingActions.Add(new AddRelationAction(this.actualUnitRole, user));
				}
			});
		}
Ejemplo n.º 4
0
        private void PrepareRolesForAdd()
        {
            foreach (AUSchemaRole sr in this.existingSchemaRoles)
            {
                bool   enableRole   = sr.Status == SchemaObjectStatus.Normal;
                AURole existingRole = AUCommon.FindMatchRole(this.existingUnitRoles, sr);
                AURole inputRole    = this.InputRoles != null?AUCommon.FindMatchRole(this.InputRoles, sr) : null;

                if (inputRole != null && existingRole != null && inputRole.ID != existingRole.ID)
                {
                    throw new AUObjectException(string.Format("导入的角色{0}与现有角色{1}的ID不一致,导致无法继续执行导入。", inputRole.ID, existingRole.ID));
                }

                if (existingRole == null)
                {
                    if (inputRole == null)
                    {
                        inputRole = new AURole()
                        {
                            ID = UuidHelper.NewUuidString(), SchemaRoleID = sr.ID, Status = SchemaObjectStatus.Normal
                        }
                    }
                    ;

                    inputRole.Status = SchemaObjectStatus.Normal;

                    if (enableRole == false)
                    {
                        inputRole.Status = SchemaObjectStatus.Deleted;
                    }

                    pendingActions.Add(new AddMemberAction((AdminUnit)this.Data, inputRole));
                }
                else if (existingRole.Status != sr.Status)
                {
                    pendingActions.Add(sr.Status == SchemaObjectStatus.Normal ? (IPendingAction) new EnableMemberAction(existingRole, (AdminUnit)this.Data) : new RemoveMemberAction((AdminUnit)this.Data, existingRole));
                }
            }
        }
Ejemplo n.º 5
0
        public void AddAdminUnitWithMembers(ClientAdminUnit unit, ClientAdminUnit parent, ClientAURole[] roles, ClientAUAdminScope[] scopes)
        {
            roles.NullCheck("roles");
            scopes.NullCheck("scopes");
            CheckIDProvided(unit);

            AURole[] auRoles = new AURole[roles.Length];
            for (int i = roles.Length - 1; i >= 0; i--)
            {
                auRoles[i] = (AURole)roles[i].ToSchemaObject();
            }

            AUAdminScope[] auScopes = new AUAdminScope[scopes.Length];
            for (int i = scopes.Length - 1; i >= 0; i--)
            {
                auScopes[i] = (AUAdminScope)scopes[i].ToSchemaObject();
            }

            EnsureID(unit);
            AdminUnit auParent = parent != null ? (AdminUnit)parent.ToSchemaObject(true) : null;

            this.Facade.AddAdminUnitWithMembers((AdminUnit)unit.ToSchemaObject(false), auParent, auRoles, auScopes);
        }
Ejemplo n.º 6
0
        private void PrepareRolesForAdd()
        {
            foreach (AUSchemaRole sr in this.existingSchemaRoles)
            {
                bool enableRole = sr.Status == SchemaObjectStatus.Normal;
                AURole existingRole = AUCommon.FindMatchRole(this.existingUnitRoles, sr);
                AURole inputRole = this.InputRoles != null ? AUCommon.FindMatchRole(this.InputRoles, sr) : null;
                if (inputRole != null && existingRole != null && inputRole.ID != existingRole.ID)
                    throw new AUObjectException(string.Format("导入的角色{0}与现有角色{1}的ID不一致,导致无法继续执行导入。", inputRole.ID, existingRole.ID));

                if (existingRole == null)
                {
                    if (inputRole == null)
                        inputRole = new AURole() { ID = UuidHelper.NewUuidString(), SchemaRoleID = sr.ID, Status = SchemaObjectStatus.Normal };

                    inputRole.Status = SchemaObjectStatus.Normal;

                    if (enableRole == false)
                    {
                        inputRole.Status = SchemaObjectStatus.Deleted;
                    }

                    pendingActions.Add(new AddMemberAction((AdminUnit)this.Data, inputRole));

                }
                else if (existingRole.Status != sr.Status)
                {
                    pendingActions.Add(sr.Status == SchemaObjectStatus.Normal ? (IPendingAction)new EnableMemberAction(existingRole, (AdminUnit)this.Data) : new RemoveMemberAction((AdminUnit)this.Data, existingRole));
                }
            }
        }
Ejemplo n.º 7
0
		public void AddAdminUnitWithMembers(AdminUnit unit, AdminUnit parent, AURole[] roles, AUAdminScope[] scopes)
		{
			if (parent == null)
				CheckAUSchemaPermission(unit.GetUnitSchema());
			else
				CheckUnitPermission(AUOperationType.AddAdminUnit, "AddSubUnit", parent);

			AdminUnitExecutor executor = new Executors.AdminUnitExecutor(AUOperationType.AddAdminUnit, parent, unit)
			{
				NeedValidation = this.NeedValidationAndStatusCheck,
				NeedParentStatusCheck = this.NeedValidationAndStatusCheck,
				InputRoles = roles,
				InputAdminScopes = scopes

			};

			ExecuteWithActions(AUOperationType.AddAdminUnit, () => SCActionContext.Current.DoActions(() =>
			{
				executor.Execute();
			}));
		}