diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java index ae5e176e0..70f29e48e 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -4,11 +4,15 @@ import com.fr.base.FRContext; import com.fr.base.extension.FileExtension; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.file.filetree.FileNode; +import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; +import com.fr.report.DesignAuthority; import com.fr.stable.ArrayUtils; +import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.authority.AuthorityOperator; import javax.swing.text.Position; import javax.swing.tree.DefaultTreeModel; @@ -23,6 +27,11 @@ import java.util.List; public class TemplateFileTree extends EnvFileTree { + /** + * 远程设计拥有全部权限的文件夹路径 + */ + private ArrayList paths = new ArrayList<>(); + public TemplateFileTree() { super(ProjectConstants.REPORTLETS_NAME, null, null); } @@ -113,6 +122,34 @@ public class TemplateFileTree extends EnvFileTree { */ @Override public void refreshEnv() { + paths.clear(); + + if (!WorkContext.getCurrent().isLocal()) { + try { + String username = WorkContext.getConnector().currentUser(); + // 远程设计获取全部设计成员的权限列表 + DesignAuthority[] authorities = WorkContext.getCurrent().get(AuthorityOperator.class).getAuthorities(); + DesignAuthority authority = null; + + if (authorities != null) { + for (DesignAuthority designAuthority : authorities) { + if (ComparatorUtils.equals(designAuthority.getUsername(), username)) { + authority = designAuthority; + } + } + } + if (authority != null) { + for (DesignAuthority.Item item : authority.getItems()) { + if (item.getType()) { + paths.add(item.getPath()); + } + } + } + } catch (Exception exception) { + FineLoggerFactory.getLogger().error(exception.getMessage(), exception); + } + } + DefaultTreeModel defaultTreeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode rootTreeNode = (ExpandMutableTreeNode) defaultTreeModel.getRoot(); @@ -152,18 +189,16 @@ public class TemplateFileTree extends EnvFileTree { */ private ExpandMutableTreeNode[] fileNodeArray2TreeNodeArray(FileNode[] fileNodes) { boolean isLocal = WorkContext.getCurrent().isLocal(); - String username = WorkContext.getConnector().currentUser(); ExpandMutableTreeNode[] res = new ExpandMutableTreeNode[fileNodes.length]; for (int i = 0; i < res.length; i++) { FileNode fn = fileNodes[i]; res[i] = new ExpandMutableTreeNode(fn); if (fn.isDirectory()) { res[i].add(new ExpandMutableTreeNode()); - if (isLocal) { + if (isLocal || WorkContext.getCurrent().isRoot()) { res[i].setFullAuthority(true); } else { - // todo 判断权限 - boolean hasFullAuthority = false; + boolean hasFullAuthority = isContained(fn); res[i].setFullAuthority(hasFullAuthority); } } @@ -172,6 +207,40 @@ public class TemplateFileTree extends EnvFileTree { return res; } + private boolean isContained(FileNode fileNode) { + + for (String auPath : paths) { + if (isContained(auPath, fileNode)) { + return true; + } + } + return false; + } + + private boolean isContained(String auPath, FileNode fileNode) { + auPath = ProjectConstants.REPORTLETS_NAME + CoreConstants.SEPARATOR + auPath; + String fileName = fileNode.getEnvPath(); + String[] auPaths = auPath.split(CoreConstants.SEPARATOR); + String[] nodePaths = fileName.split(CoreConstants.SEPARATOR); + + if (auPaths.length == nodePaths.length) { + for (int i = 0; i < auPaths.length; i++) { + if (!auPaths[i].equals(nodePaths[i])) { + return false; + } + } + return fileNode.isDirectory(); + } else { + int len = Math.min(auPaths.length, nodePaths.length); + for (int i = 0; i < len; i++) { + if (!auPaths[i].equals(nodePaths[i])) { + return false; + } + } + return true; + } + } + private FileNode[] listFileNodes(String filePath) { FileNode[] fileNodes = null;