Beispiel #1
0
        public SCAclMemberCollection LoadMembers(IConnectiveSqlClause condition, DateTime timePoint)
        {
            ConnectiveSqlClauseCollection timePointBuilder  = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);
            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

            string sql = string.Format(
                "SELECT * FROM {0} WHERE {1} ORDER BY SortID",
                this.GetLoadingTableName(timePoint),
                connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

            SCAclMemberCollection result = new SCAclMemberCollection();

            AUCommon.DoDbAction(() =>
            {
                using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
                {
                    using (IDataReader reader = DbHelper.RunSqlReturnDR(sql, this.GetConnectionName()))
                    {
                        ORMapping.DataReaderToCollection(result, reader);
                    }
                }
            });

            return(result);
        }
Beispiel #2
0
        public void InheritAclPermissionsTest()
        {
            //准备组织数据
            SCOrganization parent = SCObjectGenerator.PrepareOrganizationObject();

            SCObjectOperations.Instance.AddOrganization(parent, SCOrganization.GetRoot());

            //准备应用
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role1 = SCObjectGenerator.PrepareRoleObject();

            //准备角色
            SCObjectOperations.Instance.AddRole(role1, application);

            //准备人员
            SCUser user1 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1");

            SCObjectOperations.Instance.AddUser(user1, parent);

            //将人员添加到角色
            SCObjectOperations.Instance.AddMemberToRole(user1, role1);

            SCRole role2 = SCObjectGenerator.PrepareRoleObject();

            //准备角色
            SCObjectOperations.Instance.AddRole(role2, application);

            //准备人员
            SCUser user2 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1");

            SCObjectOperations.Instance.AddUser(user2, parent);

            //将人员添加到角色
            SCObjectOperations.Instance.AddMemberToRole(user2, role2);

            //准备Container
            SCAclContainer container = new SCAclContainer(parent);

            container.Members.Add("AddChildren", role1);
            container.Members.Add("AddChildren", role2);

            SCObjectOperations.Instance.UpdateObjectAcl(container);

            SCOrganization organization = SCObjectGenerator.PrepareOrganizationObject();

            SCObjectOperations.Instance.AddOrganization(organization, parent);

            SCAclMemberCollection members = SCAclAdapter.Instance.LoadByContainerID(organization.ID, DateTime.MinValue);

            Assert.IsTrue(members.ContainsKey("AddChildren", role1.ID));
            Assert.AreEqual(SchemaObjectStatus.Normal, members["AddChildren", role1.ID].Status);

            Assert.IsTrue(members.ContainsKey("AddChildren", role2.ID));
            Assert.AreEqual(SchemaObjectStatus.Normal, members["AddChildren", role2.ID].Status);
        }
Beispiel #3
0
        public void DeleteAclMemberTest()
        {
            //准备组织数据
            SCOrganization organization = SCObjectGenerator.PrepareOrganizationObject();

            SCObjectOperations.Instance.AddOrganization(organization, SCOrganization.GetRoot());

            //准备应用
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role1 = SCObjectGenerator.PrepareRoleObject();

            //准备角色
            SCObjectOperations.Instance.AddRole(role1, application);

            //准备人员
            SCUser user1 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1");

            SCObjectOperations.Instance.AddUser(user1, organization);

            //将人员添加到角色
            SCObjectOperations.Instance.AddMemberToRole(user1, role1);

            SCRole role2 = SCObjectGenerator.PrepareRoleObject();

            //准备角色
            SCObjectOperations.Instance.AddRole(role2, application);

            //准备人员
            SCUser user2 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1");

            SCObjectOperations.Instance.AddUser(user2, organization);

            //将人员添加到角色
            SCObjectOperations.Instance.AddMemberToRole(user2, role2);

            //准备Container
            SCAclContainer container = new SCAclContainer(organization);

            container.Members.Add("AddChildren", role1);
            container.Members.Add("AddChildren", role2);

            SCObjectOperations.Instance.UpdateObjectAcl(container);

            Console.WriteLine("ContainerID: {0}", container.ContainerID);

            SCObjectOperations.Instance.DeleteRole(role1);
            SCObjectOperations.Instance.DeleteRole(role2);

            SCAclMemberCollection members = SCAclAdapter.Instance.LoadByContainerID(organization.ID, DateTime.MinValue);

            Assert.IsFalse(members.ContainsKey("AddChildren", role1.ID));
            Assert.IsFalse(members.ContainsKey("AddChildren", role2.ID));
        }
Beispiel #4
0
        protected void HandleSaveClick(object sender, EventArgs e)
        {
            SCAclMemberCollection aclMembers = JSONSerializerExecute.Deserialize <SCAclMemberCollection>(this.postData.Value);

            try
            {
                var obj = DbUtil.GetEffectiveObject(this.Object.ID, "无法正确加载对象");
                InnerDoSave(aclMembers, obj, this.chkInherit.Checked);
                this.extScript.Text = Util.SurroundScriptBlock("window.close();");
            }
            catch (Exception ex)
            {
                WebUtility.ShowClientError(ex);
            }
        }
Beispiel #5
0
        private static void InnerDoSave(SCAclMemberCollection aclMembers, SchemaObjectBase obj, bool inheritRights)
        {
            HashSet <string> roleIds = new HashSet <string>();

            aclMembers.ForEach(m => roleIds.Add(m.MemberID));

            var roles = PCService.Instance.LoadRoleByIds(roleIds.ToArray());

            var pmDefs = GetPermissionDefinitions(obj.SchemaType);

            var container = new SCAclContainer(obj);

            foreach (var acl in aclMembers)
            {
                Debug.Assert(acl.ContainerID == obj.ID, "ACL的容器ID必须与对象的ID一致");
                container.Members.Add(acl.ContainerPermission, roles.Find(m => m.ID == acl.MemberID));
            }

            //if (obj is SCOrganization)
            //{
            //    if (obj.Properties.GetValue("AllowAclInheritance", false) != inheritRights)
            //    {
            //        obj.Properties.SetValue("AllowAclInheritance", inheritRights);

            //        // TODO:换更合适的方式
            //        PC.Executors.SCObjectOperations.Instance.UpdateOrganization((SCOrganization)obj);
            //    }
            //}

            SCAclMemberCollection originalMembers = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(obj.ID, DateTime.MinValue);

            if (container.Members.MergeChangedItems(originalMembers))
            {
                AU.Operations.Facade.InstanceWithPermissions.UpdateObjectAcl(container);
            }
        }
		public SCAclMemberCollection LoadMembers(IConnectiveSqlClause condition, DateTime timePoint)
		{
			ConnectiveSqlClauseCollection timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);
			ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

			string sql = string.Format(
				"SELECT * FROM {0} WHERE {1} ORDER BY SortID",
				this.GetLoadingTableName(timePoint),
				connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

			SCAclMemberCollection result = new SCAclMemberCollection();

			using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
			{
				using (IDataReader reader = DbHelper.RunSqlReturnDR(sql, this.GetConnectionName()))
				{
					ORMapping.DataReaderToCollection(result, reader);

					return result;
				}
			}
		}
		private static void InnerDoSave(SCAclMemberCollection aclMembers, SchemaObjectBase obj, bool inheritRights)
		{
			HashSet<string> roleIds = new HashSet<string>();
			aclMembers.ForEach(m => roleIds.Add(m.MemberID));

			var roles = PCService.Instance.LoadRoleByIds(roleIds.ToArray());

			var pmDefs = GetPermissionDefinitions(obj.SchemaType);

			var container = new SCAclContainer(obj);

			foreach (var acl in aclMembers)
			{
				Debug.Assert(acl.ContainerID == obj.ID, "ACL的容器ID必须与对象的ID一致");
				container.Members.Add(acl.ContainerPermission, roles.Find(m => m.ID == acl.MemberID));
			}

			//if (obj is SCOrganization)
			//{
			//    if (obj.Properties.GetValue("AllowAclInheritance", false) != inheritRights)
			//    {
			//        obj.Properties.SetValue("AllowAclInheritance", inheritRights);

			//        // TODO:换更合适的方式
			//        PC.Executors.SCObjectOperations.Instance.UpdateOrganization((SCOrganization)obj);
			//    }
			//}

			SCAclMemberCollection originalMembers = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(obj.ID, DateTime.MinValue);

			if (container.Members.MergeChangedItems(originalMembers))
				AU.Operations.Facade.InstanceWithPermissions.UpdateObjectAcl(container);
		}