Beispiel #1
0
        public static SCPermissionCollection GetPermissions(this DataTable table, SCPermissionCollection existedPermissions)
        {
            Dictionary <string, SCPermission> existedDict = existedPermissions.ToDictionaryByCodeName();

            SCPermissionCollection permissions = new SCPermissionCollection();

            if (table != null && table.Columns.Contains("权限点/数据权限"))
            {
                foreach (DataRow row in table.Rows)
                {
                    string permissionName = row["权限点/数据权限"].ToString();

                    if (permissionName.IsNotEmpty())
                    {
                        SCPermission permission = null;

                        if (existedDict.TryGetValue(permissionName, out permission) == false)
                        {
                            permission = new SCPermission();

                            InitProperties(permission, permissionName);
                        }

                        permissions.Add(permission);
                    }
                }
            }

            return(permissions);
        }
Beispiel #2
0
        public void JoinRoleAndPermissionTest()
        {
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role = SCObjectGenerator.PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(role, application);

            SCPermission permission = SCObjectGenerator.PreparePermissionObject();

            SCObjectOperations.Instance.AddPermission(permission, application);

            SCRelationObject relation = SCObjectOperations.Instance.JoinRoleAndPermission(role, permission);

            role.ClearRelativeData();
            Assert.IsTrue(role.CurrentPermissions.ContainsKey(permission.ID));
            Assert.IsTrue(permission.CurrentRoles.ContainsKey(role.ID));

            SCObjectOperations.Instance.DisjoinRoleAndPermission(role, permission);

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

            Assert.IsFalse(role.CurrentPermissions.ContainsKey(permission.ID));
            Assert.IsFalse(permission.CurrentRoles.ContainsKey(role.ID));
        }
Beispiel #3
0
        public void SCQueryPermissionsByUserIDsSnapshotTest()
        {
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role = SCObjectGenerator.PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(role, application);

            SCPermission permission = SCObjectGenerator.PreparePermissionObject();

            SCObjectOperations.Instance.AddPermission(permission, application);

            SCRelationObject relation = SCObjectOperations.Instance.JoinRoleAndPermission(role, permission);

            SCUser user1 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1");

            SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot());

            SCObjectOperations.Instance.AddMemberToRole(user1, role);

            SchemaObjectCollection result = SCSnapshotAdapter.Instance.QueryPermissionsByUserIDs(new string[] { user1.ID }, false, DateTime.MinValue);

            Assert.IsTrue(result.Count > 0);

            Console.WriteLine(result[0].Properties.GetValue("Name", string.Empty));

            Assert.AreEqual(permission.ID, result[0].ID);
        }
Beispiel #4
0
        public void DeletePermissionTest()
        {
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role = SCObjectGenerator.PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(role, application);

            SCPermission permission = SCObjectGenerator.PreparePermissionObject();

            SCObjectOperations.Instance.AddPermission(permission, application);

            SCRelationObject relation = SCObjectOperations.Instance.JoinRoleAndPermission(role, permission);

            SCObjectOperations.Instance.DeletePermission(permission);

            application.ClearRelativeData();
            role.ClearRelativeData();

            Console.WriteLine("Role permission count {0}, applicaiton permission count {1}",
                              role.CurrentPermissions.Count, application.CurrentPermissions.Count);

            Assert.AreEqual(0, role.CurrentPermissions.Count);
            Assert.AreEqual(0, application.CurrentPermissions.Count);
        }
Beispiel #5
0
        public static SCPermission PreparePermissionObject()
        {
            SCPermission permission = new SCPermission();

            permission.ID       = UuidHelper.NewUuidString();
            permission.Name     = "Great Permission";
            permission.CodeName = permission.ID;

            return(permission);
        }
Beispiel #6
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;
        }
Beispiel #7
0
        public void AddPermissionTest()
        {
            Trace.CorrelationManager.ActivityId = UuidHelper.NewUuid();

            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCPermission permission = SCObjectGenerator.PreparePermissionObject();

            SCObjectOperations.Instance.AddPermission(permission, application);

            application.CurrentPermissions.ContainsKey(permission.ID);
        }
		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;
		}
Beispiel #9
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);
        }
Beispiel #10
0
        public SchemaObjectBase UpdatePermission(SCPermission permission)
        {
            SCObjectExecutor executor = new SCObjectExecutor(SCOperationType.UpdatePermission, permission)
            {
                NeedValidation = this.NeedValidationAndStatusCheck, NeedStatusCheck = this.NeedValidationAndStatusCheck
            };

            if (this._NeedCheckPermissions)
            {
                CheckApplicationMemberPermissions(SCOperationType.UpdatePermission, "UpdatePermissions", permission);
            }

            SchemaObjectBase result = null;

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

            return(result);
        }
Beispiel #11
0
        public SCRelationObject JoinRoleAndPermission(SCRole role, SCPermission permission)
        {
            SCJoinRoleAndPermissionExecutor executor =
                new SCJoinRoleAndPermissionExecutor(SCOperationType.JoinRoleAndPermission, role, permission)
            {
                NeedStatusCheck = this.NeedValidationAndStatusCheck
            };

            if (this._NeedCheckPermissions)
            {
                CheckApplicationMemberPermissions(SCOperationType.JoinRoleAndPermission, "EditRelationOfRolesAndPermissions", permission);
            }

            SCRelationObject result = null;

            ExecuteWithActions(SCOperationType.JoinRoleAndPermission, () => SCActionContext.Current.DoActions(() => result = (SCRelationObject)executor.Execute()));

            return(result);
        }
Beispiel #12
0
        private static void PrepareTestApplicationData()
        {
            SCApplication app1 = PrepareSCObject <SCApplication>("应用1", "应用1");

            SCObjectOperations.Instance.AddApplication(app1);

            SCRole role11 = PrepareSCObject <SCRole>("应用1角色1", "应用1角色1");

            SCObjectOperations.Instance.AddRole(role11, app1);

            SCRole role12 = PrepareSCObject <SCRole>("应用1角色2", "应用1角色2");

            SCObjectOperations.Instance.AddRole(role12, app1);

            SCPermission permission11 = PrepareSCObject <SCPermission>("应用1权限1", "应用1权限1");

            SCObjectOperations.Instance.AddPermission(permission11, app1);

            SCPermission permission12 = PrepareSCObject <SCPermission>("应用1权限2", "应用1权限2");

            SCObjectOperations.Instance.AddPermission(permission12, app1);

            SCApplication app2 = PrepareSCObject <SCApplication>("应用2", "应用2");

            SCObjectOperations.Instance.AddApplication(app2);

            SCRole role21 = PrepareSCObject <SCRole>("应用2角色1", "应用2角色1");

            SCObjectOperations.Instance.AddRole(role21, app2);

            SCRole role22 = PrepareSCObject <SCRole>("应用2角色2", "应用2角色2");

            SCObjectOperations.Instance.AddRole(role22, app2);

            SCPermission permission21 = PrepareSCObject <SCPermission>("应用2权限1", "应用2权限1");

            SCObjectOperations.Instance.AddPermission(permission21, app2);

            SCPermission permission22 = PrepareSCObject <SCPermission>("应用2权限2", "应用2权限2");

            SCObjectOperations.Instance.AddPermission(permission22, app2);
        }
Beispiel #13
0
        public SchemaObjectBase DeletePermission(SCPermission permission)
        {
            SCObjectExecutor executor = new SCObjectExecutor(SCOperationType.DeletePermission, permission)
            {
                NeedValidation = false, NeedDeleteMemberRelations = true, NeedDeleteRelations = true, NeedStatusCheck = this.NeedValidationAndStatusCheck
            };

            if (this._NeedCheckPermissions)
            {
                CheckApplicationMemberPermissions(SCOperationType.DeletePermission, "DeletePermissions", permission);
            }

            permission.Status = SchemaObjectStatus.Deleted;

            SchemaObjectBase result = null;

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

            return(result);
        }
Beispiel #14
0
        public static SCRolesAndPermissions GetRolesAndPermissions(this DataTable table, SCPermissionCollection existedPermissions)
        {
            table.NullCheck("table");

            SCRoleCollection       roles       = new SCRoleCollection();
            SCPermissionCollection permissions = table.GetPermissions(existedPermissions);

            if (table.Columns.Contains("权限点/数据权限") && table.Columns.Count > StartColumn)
            {
                for (int i = StartColumn; i < table.Columns.Count; i++)
                {
                    string roleName = table.Columns[i].ColumnName;

                    SCRole role = roles.Append(InitProperties(new SCRole(), roleName));

                    foreach (DataRow row in table.Rows)
                    {
                        string permissionName = row["权限点/数据权限"].ToString();

                        if (permissionName.IsNotEmpty())
                        {
                            SCPermission permission = permissions.Find(p => string.Compare(permissionName, p.CodeName, true) == 0);

                            if (permission != null)
                            {
                                string cellValue = row[roleName].ToString();

                                if (cellValue.IsNullOrEmpty() || cellValue.Trim().IsNullOrEmpty() || cellValue.Trim().ToUpper() == "N")
                                {
                                    continue;
                                }

                                role.CurrentPermissions.Append(permission);
                            }
                        }
                    }
                }
            }

            return(new SCRolesAndPermissions(roles, permissions));
        }
Beispiel #15
0
        public SCRelationObject DisjoinRoleAndPermission(SCRole role, SCPermission permission)
        {
            SCJoinRoleAndPermissionExecutor executor =
                new SCJoinRoleAndPermissionExecutor(SCOperationType.DisjoinRoleAndPermission, role, permission)
            {
                OverrideExistedRelation = true, NeedStatusCheck = this.NeedValidationAndStatusCheck
            };

            if (this._NeedCheckPermissions)
            {
                CheckApplicationMemberPermissions(SCOperationType.DisjoinRoleAndPermission, "EditRelationOfRolesAndPermissions", permission);
            }

            executor.Relation.Status = SchemaObjectStatus.Deleted;

            SCRelationObject result = null;

            ExecuteWithActions(SCOperationType.DisjoinRoleAndPermission, () => SCActionContext.Current.DoActions(() => result = (SCRelationObject)executor.Execute()));

            return(result);
        }
Beispiel #16
0
        private SCRelationObject PrepareRelationObject(SCRole role, SCPermission permission)
        {
            SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(role.ID, permission.ID);

            if (relation == null)
            {
                relation = new SCRelationObject(role, permission);
            }
            else
            {
                if (relation.Status == SchemaObjectStatus.Normal)
                {
                    this._RelationExisted = true;
                }
                else
                {
                    relation.Status = SchemaObjectStatus.Normal;
                }
            }

            return(relation);
        }
		public SCRelationObject DisjoinRoleAndPermission(SCRole role, SCPermission permission)
		{
			SCJoinRoleAndPermissionExecutor executor =
				new SCJoinRoleAndPermissionExecutor(SCOperationType.DisjoinRoleAndPermission, role, permission) { OverrideExistedRelation = true, NeedStatusCheck = this.NeedValidationAndStatusCheck };

			if (this._NeedCheckPermissions)
				CheckApplicationMemberPermissions(SCOperationType.DisjoinRoleAndPermission, "EditRelationOfRolesAndPermissions", permission);

			executor.Relation.Status = SchemaObjectStatus.Deleted;

			SCRelationObject result = null;

			ExecuteWithActions(SCOperationType.DisjoinRoleAndPermission, () => SCActionContext.Current.DoActions(() => result = (SCRelationObject)executor.Execute()));

			return result;
		}
		public SCRelationObject JoinRoleAndPermission(SCRole role, SCPermission permission)
		{
			SCJoinRoleAndPermissionExecutor executor =
				new SCJoinRoleAndPermissionExecutor(SCOperationType.JoinRoleAndPermission, role, permission) { NeedStatusCheck = this.NeedValidationAndStatusCheck };

			if (this._NeedCheckPermissions)
				CheckApplicationMemberPermissions(SCOperationType.JoinRoleAndPermission, "EditRelationOfRolesAndPermissions", permission);

			SCRelationObject result = null;

			ExecuteWithActions(SCOperationType.JoinRoleAndPermission, () => SCActionContext.Current.DoActions(() => result = (SCRelationObject)executor.Execute()));

			return result;
		}
		public SchemaObjectBase DeletePermission(SCPermission permission)
		{
			SCObjectExecutor executor = new SCObjectExecutor(SCOperationType.DeletePermission, permission) { NeedValidation = false, NeedDeleteMemberRelations = true, NeedDeleteRelations = true, NeedStatusCheck = this.NeedValidationAndStatusCheck };

			if (this._NeedCheckPermissions)
				CheckApplicationMemberPermissions(SCOperationType.DeletePermission, "DeletePermissions", permission);

			permission.Status = SchemaObjectStatus.Deleted;

			SchemaObjectBase result = null;

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

			return result;
		}
		public SchemaObjectBase UpdatePermission(SCPermission permission)
		{
			SCObjectExecutor executor = new SCObjectExecutor(SCOperationType.UpdatePermission, permission) { NeedValidation = this.NeedValidationAndStatusCheck, NeedStatusCheck = this.NeedValidationAndStatusCheck };

			if (this._NeedCheckPermissions)
				CheckApplicationMemberPermissions(SCOperationType.UpdatePermission, "UpdatePermissions", permission);

			SchemaObjectBase result = null;

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

			return result;
		}
		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;
		}
		private SCRelationObject PrepareRelationObject(SCRole role, SCPermission permission)
		{
			SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(role.ID, permission.ID);

			if (relation == null)
				relation = new SCRelationObject(role, permission);
			else
			{
				if (relation.Status == SchemaObjectStatus.Normal)
					this._RelationExisted = true;
				else
					relation.Status = SchemaObjectStatus.Normal;
			}

			return relation;
		}
Beispiel #23
0
        public List <AdditionOperation> GetAditionOperations(string id)
        {
            List <AdditionOperation> list = new List <AdditionOperation>();

            if (string.IsNullOrEmpty(id) == false)
            {
                var obj = SchemaObjectAdapter.Instance.Load(id);
                if (obj.Status == SchemaObjectStatus.Normal)
                {
                    if (obj is SCUser)
                    {
                        var relation = obj.CurrentParentRelations.Find(m => m.Status == SchemaObjectStatus.Normal && m.Default && Util.IsOrganization(m.ParentSchemaType));
                        if (relation != null)
                        {
                            list.Add(new AdditionOperation("转到缺省组织", false, GetClientUrl("~/lists/OUExplorer.aspx?ou=" + relation.ParentID), "_blank"));
                        }
                        string ownerId = ((SCUser)obj).OwnerID;
                        if (string.IsNullOrEmpty(ownerId) == false)
                        {
                            list.Add(new AdditionOperation("转到所有者", false, GetClientUrl("~/lists/OUExplorer.aspx?ou=" + ownerId), "_blank"));
                        }
                    }
                    else if (obj is SCGroup)
                    {
                        SCGroup grp      = (SCGroup)obj;
                        var     parents  = grp.CurrentParentRelations;
                        var     relation = parents.Find(m => m.Status == SchemaObjectStatus.Normal && Util.IsOrganization(m.ParentSchemaType));
                        if (relation != null)
                        {
                            list.Add(new AdditionOperation("转到组织", false, GetClientUrl("~/lists/OUExplorer.aspx?ou=" + relation.ParentID), "_blank"));
                        }
                    }
                    else if (obj is SCRole)
                    {
                        SCRole role = (SCRole)obj;
                        list.Add(new AdditionOperation("打开应用", false, GetClientUrl("~/lists/AllApps.aspx?id=" + role.CurrentApplication.ID), "_blank"));
                        list.Add(new AdditionOperation("定位", true, GetClientUrl("~/lists/AppRoles.aspx?app=" + role.CurrentApplication.ID) + "&id=" + role.ID, "_blank"));
                        //if (this.GetEditRoleMembersEnabled(role.CurrentApplication.ID))
                        //{
                        //    list.Add(new AdditionOperation("角色矩阵", true, GetClientUrl("/MCSWebApp/WorkflowDesigner/MatrixModalDialog/RolePropertyExtension.aspx?AppID=" + role.CurrentApplication.ID + "&roleID=" + role.ID)));
                        //}

                        list.Add(new AdditionOperation("角色功能定义", true, GetClientUrl("~/dialogs/RoleDefinition.aspx?role=" + role.ID)));
                    }
                    else if (obj is SCPermission)
                    {
                        SCPermission permission = (SCPermission)obj;
                        list.Add(new AdditionOperation("打开应用", false, GetClientUrl("~/lists/AllApps.aspx?id=" + permission.CurrentApplication.ID), "_blank"));
                        list.Add(new AdditionOperation("定位", true, GetClientUrl("~/lists/AppFunctions.aspx?app=" + permission.CurrentApplication.ID) + "&id=" + permission.ID, "_blank"));
                    }
                    else if (obj is SCOrganization)
                    {
                        var relation = obj.CurrentParentRelations.Find(m => m.Status == SchemaObjectStatus.Normal && Util.IsOrganization(m.ParentSchemaType));
                        if (relation != null)
                        {
                            list.Add(new AdditionOperation("转到上级组织", false, GetClientUrl("~/lists/OUExplorer.aspx?ou=" + relation.ParentID), "_blank"));
                        }
                    }
                    else if (obj is SCApplication)
                    {
                        list.Add(new AdditionOperation("定位", false, GetClientUrl("~/lists/AllApps.aspx?id=" + obj.ID), "_blank"));
                    }
                }
            }

            return(list);
        }