private void ImportAcl(IImportContext context, PC.Executors.ISCObjectOperations executor, PC.SCApplication targetApp, PC.Permissions.SCAclItem[] acls) { if (acls.Length > 0) { var container = new PC.Permissions.SCAclContainer(targetApp); context.AppendLogFormat("正在替 {0} 合并ACL定义\r\n", targetApp.ToDescription()); var oldPermissions = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(targetApp.ID, DateTime.MinValue); PC.Permissions.SCAclMemberCollection members = new PC.Permissions.SCAclMemberCollection(); foreach (var item in acls) { ImportService.Instance.WithEffectObject <PC.SchemaObjectBase>(item.MemberID, role => { members.Add(item.ContainerPermission, role); }, null); } if (oldPermissions != null && oldPermissions.Count > 0) { members.MergeChangedItems(oldPermissions); } container.Members.CopyFrom(members); PC.Adapters.SCAclAdapter.Instance.Update(container); } }
public override void DoImport(SCObjectSet objectSet, IImportContext context) { if (objectSet.HasAcls) { context.SetStatus(0, 1, "正在寻找当前组织内组织的ACL。"); var pendingOrgs = new List <SCOrganization>(objectSet.Objects.Count); foreach (SCOrganization item in ImportService.Instance.FilterNormalObjects <SCOrganization>(objectSet.Objects)) { // 进行过滤,保留当前组织中的组织 if (objectSet.Relations.Exists(r => r.ParentID == this.Parent.ID && r.Status == SchemaObjectStatus.Normal && r.ID == item.ID)) { pendingOrgs.Add(item); } } int allCount = pendingOrgs.Count; int count = 0; foreach (SCOrganization item in pendingOrgs) { var summaryName = item.ToDescription(); count++; var pendingAcls = ImportService.Instance.FilterAcls(objectSet.Acls, acl => acl.ContainerID == item.ID && acl.Status == SchemaObjectStatus.Normal); try { var newContainer = new PC.Permissions.SCAclContainer(item); PC.Permissions.SCAclMemberCollection members = new PC.Permissions.SCAclMemberCollection(); foreach (var acl in pendingAcls) { ImportService.Instance.WithEffectObject <SchemaObjectBase>(acl.MemberID, role => { members.Add(acl.ContainerPermission, role); }, null); } var oldMembers = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(item.ID, DateTime.MinValue); if (oldMembers != null) { members.MergeChangedItems(oldMembers); } newContainer.Members.CopyFrom(members); context.SetStatus(count, allCount, "正在替换对象ACL:" + summaryName); PC.Adapters.SCAclAdapter.Instance.Update(newContainer); } catch (Exception ex) { context.AppendLogFormat("对项 {0} 的ACL操作失败,原因是:{1}\r\n", summaryName, ex.Message); } } } }
private void ImportAcl(IImportContext context, PC.Executors.ISCObjectOperations executor, PC.SCApplication targetApp, PC.Permissions.SCAclItem[] acls) { if (acls.Length > 0) { var container = new PC.Permissions.SCAclContainer(targetApp); context.AppendLogFormat("正在替 {0} 合并ACL定义\r\n", targetApp.ToDescription()); var oldPermissions = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(targetApp.ID, DateTime.MinValue); PC.Permissions.SCAclMemberCollection members = new PC.Permissions.SCAclMemberCollection(); foreach (var item in acls) { ImportService.Instance.WithEffectObject<PC.SchemaObjectBase>(item.MemberID, role => { members.Add(item.ContainerPermission, role); }, null); } if (oldPermissions != null && oldPermissions.Count > 0) { members.MergeChangedItems(oldPermissions); } container.Members.CopyFrom(members); PC.Adapters.SCAclAdapter.Instance.Update(container); } }
public override void DoImport(SCObjectSet objectSet, IImportContext context) { if (objectSet.HasAcls) { context.SetStatus(0, 1, "正在寻找当前组织内组织的ACL。"); var pendingOrgs = new List<SCOrganization>(objectSet.Objects.Count); foreach (SCOrganization item in ImportService.Instance.FilterNormalObjects<SCOrganization>(objectSet.Objects)) { // 进行过滤,保留当前组织中的组织 if (objectSet.Relations.Exists(r => r.ParentID == this.Parent.ID && r.Status == SchemaObjectStatus.Normal && r.ID == item.ID)) { pendingOrgs.Add(item); } } int allCount = pendingOrgs.Count; int count = 0; foreach (SCOrganization item in pendingOrgs) { var summaryName = item.ToDescription(); count++; var pendingAcls = ImportService.Instance.FilterAcls(objectSet.Acls, acl => acl.ContainerID == item.ID && acl.Status == SchemaObjectStatus.Normal); try { var newContainer = new PC.Permissions.SCAclContainer(item); PC.Permissions.SCAclMemberCollection members = new PC.Permissions.SCAclMemberCollection(); foreach (var acl in pendingAcls) { ImportService.Instance.WithEffectObject<SchemaObjectBase>(acl.MemberID, role => { members.Add(acl.ContainerPermission, role); }, null); } var oldMembers = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(item.ID, DateTime.MinValue); if (oldMembers != null) { members.MergeChangedItems(oldMembers); } newContainer.Members.CopyFrom(members); context.SetStatus(count, allCount, "正在替换对象ACL:" + summaryName); PC.Adapters.SCAclAdapter.Instance.Update(newContainer); } catch (Exception ex) { context.AppendLogFormat("对项 {0} 的ACL操作失败,原因是:{1}\r\n", summaryName, ex.Message); } } } }