コード例 #1
0
		public SCUpdateObjectAclExecutor(SCOperationType opType, SCAclContainer container)
			: base(opType)
		{
			container.NullCheck("container");

			this._Container = container;
		}
コード例 #2
0
		public SCUpdateConditionsExecutor(SCOperationType opType, SCConditionOwner owner)
			: base(opType)
		{
			owner.NullCheck("owner");

			this._Owner = owner;
		}
コード例 #3
0
        public SCUpdateConditionsExecutor(SCOperationType opType, SCConditionOwner owner)
            : base(opType)
        {
            owner.NullCheck("owner");

            this._Owner = owner;
        }
コード例 #4
0
 private void CheckPermissions(SCOperationType opType, SchemaDefine schemaInfo, string permissionName, params string[] containerIDs)
 {
     if (NeedCheckPermissionAndCurrentUserIsNotSupervisor && DeluxePrincipal.Current.HasPermissions(permissionName, containerIDs) == false)
     {
         throw SCAclPermissionCheckException.CreateException(opType, schemaInfo, permissionName);
     }
 }
コード例 #5
0
        public SCMoveObjectExecutor(SCOperationType opType, SCOrganization originalOrg, SCBase obj, SCOrganization targetOrg)
            : base(opType)
        {
            obj.NullCheck("obj");
            targetOrg.NullCheck("targetOrg");

            obj.ClearRelativeData();
            targetOrg.ClearRelativeData();

            if (originalOrg != null)
            {
                originalOrg.ClearRelativeData();
            }

            this._Object = obj;
            this._OriginalOrganization = originalOrg;
            this._TargetOrganization   = targetOrg;

            this._NeedChangeOwner = PrepareNeedChangeOwner(originalOrg, targetOrg, obj);

            if (originalOrg != null && originalOrg.ID == targetOrg.ID)
            {
                this._RelationExisted = true;
            }
            else
            {
                this._OriginalRelation      = PreprareOriginalRelation(originalOrg, obj);
                this._TargetRelation        = PrepareTargetRelation(targetOrg, obj);
                this._NeedGenerateFullPaths = (obj is ISCRelationContainer) && (((ISCRelationContainer)obj).GetCurrentChildrenCount() > 0);
            }
        }
コード例 #6
0
        public SCOrganizationRelativeExecutor(SCOperationType opType, SCOrganization parent, SCBase data)
            : base(opType, data)
        {
            parent.NullCheck("organization");

            data.ClearRelativeData();
            parent.ClearRelativeData();

            this._Parent   = parent;
            this._Relation = PrepareRelationObject(parent, data);

            if (this.OperationType == SCOperationType.AddOrganization)
            {
                this._AclContainer = PrepareAclContainer(parent, data);
            }

            if (data is SCUser)
            {
                this._TargetParentRelations = data.CurrentParentRelations;

                if (this.OperationType == SCOperationType.AddUser && this._TargetParentRelations.Count == 0)
                {
                    SCUser user = (SCUser)data;

                    user.OwnerID   = parent.ID;
                    user.OwnerName = parent.Properties.GetValue("Name", string.Empty);
                }
            }
        }
コード例 #7
0
		public SCOrganizationRelativeExecutor(SCOperationType opType, SCOrganization parent, SCBase data)
			: base(opType, data)
		{
			parent.NullCheck("organization");

			data.ClearRelativeData();
			parent.ClearRelativeData();

			this._Parent = parent;
			this._Relation = PrepareRelationObject(parent, data);

			if (this.OperationType == SCOperationType.AddOrganization)
				this._AclContainer = PrepareAclContainer(parent, data);

			if (data is SCUser)
			{
				this._TargetParentRelations = data.CurrentParentRelations;

				if (this.OperationType == SCOperationType.AddUser && this._TargetParentRelations.Count == 0)
				{
					SCUser user = (SCUser)data;

					user.OwnerID = parent.ID;
					user.OwnerName = parent.Properties.GetValue("Name", string.Empty);
				}
			}
		}
コード例 #8
0
		public SCMoveObjectExecutor(SCOperationType opType, SCOrganization originalOrg, SCBase obj, SCOrganization targetOrg)
			: base(opType)
		{
			obj.NullCheck("obj");
			targetOrg.NullCheck("targetOrg");

			obj.ClearRelativeData();
			targetOrg.ClearRelativeData();

			if (originalOrg != null)
				originalOrg.ClearRelativeData();

			this._Object = obj;
			this._OriginalOrganization = originalOrg;
			this._TargetOrganization = targetOrg;

			this._NeedChangeOwner = PrepareNeedChangeOwner(originalOrg, targetOrg, obj);

			if (originalOrg != null && originalOrg.ID == targetOrg.ID)
			{
				this._RelationExisted = true;
			}
			else
			{
				this._OriginalRelation = PreprareOriginalRelation(originalOrg, obj);
				this._TargetRelation = PrepareTargetRelation(targetOrg, obj);
				this._NeedGenerateFullPaths = (obj is ISCRelationContainer) && (((ISCRelationContainer)obj).GetCurrentChildrenCount() > 0);
			}
		}
コード例 #9
0
        public SCUpdateObjectAclExecutor(SCOperationType opType, SCAclContainer container)
            : base(opType)
        {
            container.NullCheck("container");

            this._Container = container;
        }
コード例 #10
0
		public SCReplaceAclRecursivelyExecutor(SCOperationType opType, ISCAclContainer parent) :
			base(opType)
		{
			parent.NullCheck("parent");

			this._Parent = parent;
			this.AutoStartTransaction = false;
		}
コード例 #11
0
        public SCReplaceAclRecursivelyExecutor(SCOperationType opType, ISCAclContainer parent) :
            base(opType)
        {
            parent.NullCheck("parent");

            this._Parent = parent;
            this.AutoStartTransaction = false;
        }
コード例 #12
0
        public SCObjectExecutor(SCOperationType opType, SCBase data)
            : base(opType)
        {
            data.NullCheck("data");

            data.ClearRelativeData();
            this._Data = data;
        }
コード例 #13
0
		public SCObjectExecutor(SCOperationType opType, SCBase data)
			: base(opType)
		{
			data.NullCheck("data");

			data.ClearRelativeData();
			this._Data = data;
		}
コード例 #14
0
        private void CheckOrganizationChildrenPermissions(SCOperationType opType, string permissionName, string childID)
        {
            SchemaObjectBase child = SchemaObjectAdapter.Instance.Load(childID);

            if (child != null)
            {
                CheckOrganizationChildrenPermissions(opType, permissionName, child);
            }
        }
コード例 #15
0
        public void AfterExecute(SCOperationType operationType)
        {
            SCOperationSnapshot snapshot = new SCOperationSnapshot()
            {
                OperationType = operationType
            };

            SCOperationSnapshotAdapter.Instance.Update(snapshot);
        }
コード例 #16
0
        private void CheckSupervisorPermissions(SCOperationType opType)
        {
            if (NeedCheckPermissionAndCurrentUserIsNotSupervisor)
            {
                string opDesp = EnumItemDescriptionAttribute.GetDescription(opType);

                throw new SCAclPermissionCheckException(string.Format("您不是超级管理员,不能执行\"{0}\"操作", opDesp));
            }
        }
コード例 #17
0
		public SCUpdateObjectImageExecutor(SCOperationType opType, SchemaObjectBase obj, string propertyName, ImageProperty image)
			: base(opType)
		{
			obj.NullCheck("obj");
			propertyName.IsNullOrEmpty().TrueThrow("propertyName不能为空!");

			this._Object = obj;
			this._PropertyName = propertyName;
			this._Image = image;
		}
コード例 #18
0
        public SCUpdateObjectImageExecutor(SCOperationType opType, SchemaObjectBase obj, string propertyName, ImageProperty image)
            : base(opType)
        {
            obj.NullCheck("obj");
            propertyName.IsNullOrEmpty().TrueThrow("propertyName不能为空!");

            this._Object       = obj;
            this._PropertyName = propertyName;
            this._Image        = image;
        }
コード例 #19
0
        private void CheckApplicationMemberPermissions(SCOperationType opType, string permissionName, ISCApplicationMember member)
        {
            if (this.NeedCheckPermissionAndCurrentUserIsNotSupervisor)
            {
                SCApplication application = member.CurrentApplication;

                if (application != null)
                {
                    CheckPermissions(opType, application.Schema, permissionName, application.ID);
                }
            }
        }
コード例 #20
0
		/// <summary>
		/// 修改对象的Owner信息
		/// </summary>
		/// <param name="opType">操作类型</param>
		/// <param name="obj">需要调整Owner的对象</param>
		/// <param name="targetOrg">调整后的Owner</param>
		public SCChangeOwnerExecutor(SCOperationType opType, SCBase obj, SCOrganization targetOrg)
			: base(opType)
		{
			obj.NullCheck("obj");
			targetOrg.NullCheck("targetOrg");

			obj.ClearRelativeData();
			targetOrg.ClearRelativeData();

			this._Object = obj;
			this._TargetOrganization = targetOrg;
		}
コード例 #21
0
        private void CheckApplicationMemberPermissions(SCOperationType opType, string permissionName, string memberID)
        {
            if (this.NeedCheckPermissionAndCurrentUserIsNotSupervisor)
            {
                ISCApplicationMember member = SchemaObjectAdapter.Instance.Load(memberID) as ISCApplicationMember;

                if (member != null)
                {
                    CheckApplicationMemberPermissions(opType, permissionName, member);
                }
            }
        }
コード例 #22
0
        /// <summary>
        /// 修改对象的Owner信息
        /// </summary>
        /// <param name="opType">操作类型</param>
        /// <param name="obj">需要调整Owner的对象</param>
        /// <param name="targetOrg">调整后的Owner</param>
        public SCChangeOwnerExecutor(SCOperationType opType, SCBase obj, SCOrganization targetOrg)
            : base(opType)
        {
            obj.NullCheck("obj");
            targetOrg.NullCheck("targetOrg");

            obj.ClearRelativeData();
            targetOrg.ClearRelativeData();

            this._Object             = obj;
            this._TargetOrganization = targetOrg;
        }
コード例 #23
0
		public SCMemberRelativeExecutorBase(SCOperationType opType, SchemaObjectBase container, SCBase member)
			: base(opType, member)
		{
			container.NullCheck("container");

			container.ClearRelativeData();

			if (member != null)
				member.ClearRelativeData();

			this._Container = container;
			this._Relation = PrepareRelationObject(container, member);
		}
コード例 #24
0
        private void CheckOrganizationChildrenPermissions(SCOperationType opType, string permissionName, SchemaObjectBase child)
        {
            SchemaObjectBase parent = child.CurrentParents.FirstOrDefault();

            if (parent != null)
            {
                CheckPermissions(opType, parent.Schema, permissionName, parent.ID);
            }
            else
            {
                CheckSupervisorPermissions(opType);
            }
        }
コード例 #25
0
		public SCJoinRoleAndPermissionExecutor(SCOperationType opType, SCRole role, SCPermission permission)
			: base(opType)
		{
			role.NullCheck("role");
			permission.NullCheck("permission");

			role.ClearRelativeData();
			permission.ClearRelativeData();

			this._Relation = PrepareRelationObject(role, permission);

			this._Role = role;
			this._Permission = permission;
		}
コード例 #26
0
        public SCJoinRoleAndPermissionExecutor(SCOperationType opType, SCRole role, SCPermission permission)
            : base(opType)
        {
            role.NullCheck("role");
            permission.NullCheck("permission");

            role.ClearRelativeData();
            permission.ClearRelativeData();

            this._Relation = PrepareRelationObject(role, permission);

            this._Role       = role;
            this._Permission = permission;
        }
コード例 #27
0
        public SchemaObjectBase DeleteUser(SCUser user, SCOrganization parent, bool deletedByContainer)
        {
            SchemaObjectStatus targetStatus = deletedByContainer ? SchemaObjectStatus.DeletedByContainer : SchemaObjectStatus.Deleted;
            SCOperationType    op           = SCOperationType.None;

            SCExecutorBase executor = null;

            if (parent == null)
            {
                op = SCOperationType.DeleteUser;

                if (this._NeedCheckPermissions)
                {
                    CheckPermissions(op, SchemaDefine.GetSchema("Organizations"), "DeleteChildren", user.OwnerID);
                }

                user.Status = targetStatus;

                executor = new SCObjectExecutor(op, user)
                {
                    NeedDeleteRelations = true, NeedValidation = false, NeedDeleteMemberRelations = this.NeedValidationAndStatusCheck, NeedStatusCheck = this.NeedValidationAndStatusCheck
                };
            }
            else
            {
                op = SCOperationType.RemoveUserFromOrganization;

                if (this._NeedCheckPermissions)
                {
                    CheckPermissions(op, parent.Schema, "DeleteChildren", parent.ID);
                }

                executor = new SCOrganizationRelativeExecutor(op, parent, user)
                {
                    OverrideExistedRelation = true, NeedValidation = false, NeedStatusCheck = this.NeedValidationAndStatusCheck, NeedParentStatusCheck = this.NeedValidationAndStatusCheck
                };

                if (((SCOrganizationRelativeExecutor)executor).Relation != null)
                {
                    ((SCOrganizationRelativeExecutor)executor).Relation.Status = targetStatus;
                }
            }

            SchemaObjectBase result = null;

            ExecuteWithActions(op, () => SCActionContext.Current.DoActions(() => result = (SchemaObjectBase)executor.Execute()));

            return(result);
        }
コード例 #28
0
        public SCMemberRelativeExecutorBase(SCOperationType opType, SchemaObjectBase container, SCBase member)
            : base(opType, member)
        {
            container.NullCheck("container");

            container.ClearRelativeData();

            if (member != null)
            {
                member.ClearRelativeData();
            }

            this._Container = container;
            this._Relation  = PrepareRelationObject(container, member);
        }
コード例 #29
0
		public void AfterExecute(SCOperationType operationType)
		{
			switch (operationType)
			{
				case SCOperationType.UpdateObjectAcl:
				case SCOperationType.ReplaceAclRecursively:
					//内部授权操作,不影响一般查询的缓存
					break;
				case SCOperationType.UpdateObjectImage:
					//图像操作也不影响缓存
					break;
				default:
					SCCacheHelper.InvalidateAllCache();
					break;
			}
		}
コード例 #30
0
        public static SCOperationLog ToOperationLog(this SCBase data, SCOperationType opType)
        {
            data.NullCheck("data");

            SCOperationLog log = SCOperationLog.CreateLogFromEnvironment();

            log.ResourceID    = data.ID;
            log.SchemaType    = data.SchemaType;
            log.OperationType = opType;
            log.Category      = data.Schema.Category;
            log.Subject       = string.Format("{0}: {1}",
                                              EnumItemDescriptionAttribute.GetDescription(opType), data.Name);

            log.SearchContent = data.ToFullTextString();

            return(log);
        }
コード例 #31
0
		public static SCOperationLog ToOperationLog(this SCBase data, SCOperationType opType)
		{
			data.NullCheck("data");

			SCOperationLog log = SCOperationLog.CreateLogFromEnvironment();

			log.ResourceID = data.ID;
			log.SchemaType = data.SchemaType;
			log.OperationType = opType;
			log.Category = data.Schema.Category;
			log.Subject = string.Format("{0}: {1}",
				EnumItemDescriptionAttribute.GetDescription(opType), data.Name);

			log.SearchContent = data.ToFullTextString();

			return log;
		}
コード例 #32
0
        public void AfterExecute(SCOperationType operationType)
        {
            switch (operationType)
            {
            case SCOperationType.UpdateObjectAcl:
            case SCOperationType.ReplaceAclRecursively:
                //内部授权操作,不影响一般查询的缓存
                break;

            case SCOperationType.UpdateObjectImage:
                //图像操作也不影响缓存
                break;

            default:
                SCCacheHelper.InvalidateAllCache();
                break;
            }
        }
コード例 #33
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="opType"></param>
		/// <param name="permissionName"></param>
		public static SCAclPermissionCheckException CreateException(SCOperationType opType, SchemaDefine schemaInfo, string permissionName)
		{
			string opDesp = EnumItemDescriptionAttribute.GetDescription(opType);

			SCAclPermissionItem permissionInfo = schemaInfo.PermissionSet[permissionName];

			string permissionDesp = string.Empty;

			if (permissionInfo != null)
			{
				permissionDesp = permissionInfo.Description;

				if (permissionDesp.IsNullOrEmpty())
					permissionDesp = permissionInfo.Name;
			}

			return new SCAclPermissionCheckException(string.Format("不能执行\"{0}\"操作,您没有\"{0}\"权限", opDesp, permissionDesp));
		}
コード例 #34
0
        private void CheckUpdateAclPermissions(SCOperationType opType, string containerID)
        {
            if (this.NeedCheckPermissionAndCurrentUserIsNotSupervisor)
            {
                SchemaObjectBase containerObj = SchemaObjectAdapter.Instance.Load(containerID);

                if (containerObj != null)
                {
                    if (containerObj is ISCApplicationMember)
                    {
                        CheckApplicationMemberPermissions(opType, "UpdateRoles", (ISCApplicationMember)containerObj);
                    }
                    else
                    {
                        CheckOrganizationChildrenPermissions(opType, "EditPermissionsOfChildren", containerObj);
                    }
                }
            }
        }
コード例 #35
0
        private void ExecuteWithActions(SCOperationType operationType, Action action)
        {
            SCDataOperationLockContext.Current.DoAddLockAction(this._AddLock, EnumItemDescriptionAttribute.GetDescription(operationType), () =>
            {
                if (this._NeedExecuteActions && action != null)
                {
                    SCObjectOperationActionCollection actions = SCObjectOperationActionSettings.GetConfig().GetActions();

                    actions.BeforeExecute(operationType);

                    action();

                    actions.AfterExecute(operationType);
                }
                else
                {
                    action();
                }
            });
        }
コード例 #36
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="opType"></param>
        /// <param name="permissionName"></param>
        public static SCAclPermissionCheckException CreateException(SCOperationType opType, SchemaDefine schemaInfo, string permissionName)
        {
            string opDesp = EnumItemDescriptionAttribute.GetDescription(opType);

            SCAclPermissionItem permissionInfo = schemaInfo.PermissionSet[permissionName];

            string permissionDesp = string.Empty;

            if (permissionInfo != null)
            {
                permissionDesp = permissionInfo.Description;

                if (permissionDesp.IsNullOrEmpty())
                {
                    permissionDesp = permissionInfo.Name;
                }
            }

            return(new SCAclPermissionCheckException(string.Format("不能执行\"{0}\"操作,您没有\"{0}\"权限", opDesp, permissionDesp)));
        }
コード例 #37
0
		private void ExecuteWithActions(SCOperationType operationType, Action action)
		{
			SCDataOperationLockContext.Current.DoAddLockAction(this._AddLock, EnumItemDescriptionAttribute.GetDescription(operationType), () =>
			{
				if (this._NeedExecuteActions && action != null)
				{
					SCObjectOperationActionCollection actions = SCObjectOperationActionSettings.GetConfig().GetActions();

					actions.BeforeExecute(operationType);

					action();

					actions.AfterExecute(operationType);
				}
				else
					action();
			});
		}
コード例 #38
0
		private void CheckPermissions(SCOperationType opType, SchemaDefine schemaInfo, string permissionName, params string[] containerIDs)
		{
			if (NeedCheckPermissionAndCurrentUserIsNotSupervisor && DeluxePrincipal.Current.HasPermissions(permissionName, containerIDs) == false)
				throw SCAclPermissionCheckException.CreateException(opType, schemaInfo, permissionName);
		}
コード例 #39
0
		private void CheckSupervisorPermissions(SCOperationType opType)
		{
			if (NeedCheckPermissionAndCurrentUserIsNotSupervisor)
			{
				string opDesp = EnumItemDescriptionAttribute.GetDescription(opType);

				throw new SCAclPermissionCheckException(string.Format("您不是超级管理员,不能执行\"{0}\"操作", opDesp));
			}
		}
コード例 #40
0
		private void CheckOrganizationChildrenPermissions(SCOperationType opType, string permissionName, SchemaObjectBase child)
		{
			SchemaObjectBase parent = child.CurrentParents.FirstOrDefault();

			if (parent != null)
				CheckPermissions(opType, parent.Schema, permissionName, parent.ID);
			else
				CheckSupervisorPermissions(opType);
		}
コード例 #41
0
		private void CheckOrganizationChildrenPermissions(SCOperationType opType, string permissionName, string childID)
		{
			SchemaObjectBase child = SchemaObjectAdapter.Instance.Load(childID);

			if (child != null)
			{
				CheckOrganizationChildrenPermissions(opType, permissionName, child);
			}
		}
コード例 #42
0
 /// <summary>
 /// 执行之后
 /// </summary>
 /// <param name="operationType"></param>
 public void AfterExecute(SCOperationType operationType)
 {
     this.ForEach(action => action.AfterExecute(operationType));
 }
コード例 #43
0
		protected SCExecutorBase(SCOperationType opType)
		{
			this.OperationType = opType;
		}
コード例 #44
0
 /// <summary>
 /// 执行之前
 /// </summary>
 /// <param name="obj">一个<see cref="SchemaObjectBase"/>实例</param>
 public void BeforeExecute(SCOperationType operationType)
 {
     this.ForEach(action => action.BeforeExecute(operationType));
 }
コード例 #45
0
		private void CheckUpdateAclPermissions(SCOperationType opType, string containerID)
		{
			if (this.NeedCheckPermissionAndCurrentUserIsNotSupervisor)
			{
				SchemaObjectBase containerObj = SchemaObjectAdapter.Instance.Load(containerID);

				if (containerObj != null)
				{
					if (containerObj is ISCApplicationMember)
						CheckApplicationMemberPermissions(opType, "UpdateRoles", (ISCApplicationMember)containerObj);
					else
						CheckOrganizationChildrenPermissions(opType, "EditPermissionsOfChildren", containerObj);
				}
			}
		}
コード例 #46
0
		public void AfterExecute(SCOperationType operationType)
		{
			SCOperationSnapshot snapshot = new SCOperationSnapshot() { OperationType = operationType };

			SCOperationSnapshotAdapter.Instance.Update(snapshot);
		}
コード例 #47
0
		public SCStatusCheckException(SchemaObjectBase relativeObject, SCOperationType opType)
			: base(string.Format("对象\"{0}\"的状态不是正常状态,不能执行{1}操作", relativeObject.ToSimpleObject().Name, EnumItemDescriptionAttribute.GetDescription(opType)))
		{
			this._RelativeObject = relativeObject;
			this._OperationType = opType;
		}
コード例 #48
0
 public SCMoveObjectToOrganizationExecutor(SCOperationType opType, SCOrganization parent, SCBase data)
     : base(opType, parent, data)
 {
 }
コード例 #49
0
		public void BeforeExecute(SCOperationType operationType)
		{
		}
コード例 #50
0
 public void BeforeExecute(SCOperationType operationType)
 {
 }
コード例 #51
0
 protected SCExecutorBase(SCOperationType opType)
 {
     this.OperationType = opType;
 }
コード例 #52
0
		private void CheckApplicationMemberPermissions(SCOperationType opType, string permissionName, ISCApplicationMember member)
		{
			if (this.NeedCheckPermissionAndCurrentUserIsNotSupervisor)
			{
				SCApplication application = member.CurrentApplication;

				if (application != null)
					CheckPermissions(opType, application.Schema, permissionName, application.ID);
			}
		}
コード例 #53
0
		public SCMemberRelativeExecutor(SCOperationType opType, SchemaObjectBase container, SCBase member)
			: base(opType, container, member)
		{
		}
コード例 #54
0
		private void CheckApplicationMemberPermissions(SCOperationType opType, string permissionName, string memberID)
		{
			if (this.NeedCheckPermissionAndCurrentUserIsNotSupervisor)
			{
				ISCApplicationMember member = SchemaObjectAdapter.Instance.Load(memberID) as ISCApplicationMember;

				if (member != null)
				{
					CheckApplicationMemberPermissions(opType, permissionName, member);
				}
			}
		}
コード例 #55
0
 public SCMemberRelativeExecutor(SCOperationType opType, SchemaObjectBase container, SCBase member)
     : base(opType, container, member)
 {
 }
コード例 #56
0
 public SCStatusCheckException(SchemaObjectBase relativeObject, SCOperationType opType)
     : base(string.Format("对象\"{0}\"的状态不是正常状态,不能执行{1}操作", relativeObject.ToSimpleObject().Name, EnumItemDescriptionAttribute.GetDescription(opType)))
 {
     this._RelativeObject = relativeObject;
     this._OperationType  = opType;
 }