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); }
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); }
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)); }
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); } }
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); }