X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fmodel%2FGroupElem.java;h=8e9cef36d70b868961c63647cd6e4f0daa08fc14;hb=62dbc7d3c1627eb63d1325ff861ae93433de2eee;hp=16c541fe97cabf0313272acb22fa12cb26a85887;hpb=4216976fae84a1b9a7a7c83111b9dd95c7825cf9;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/model/GroupElem.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/model/GroupElem.java index 16c541fe9..8e9cef36d 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/model/GroupElem.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/model/GroupElem.java @@ -1,9 +1,9 @@ package org.argeo.slc.client.ui.dist.model; +import java.security.AccessControlException; import java.util.ArrayList; import java.util.List; -import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; @@ -26,25 +26,41 @@ public class GroupElem extends DistParentElem { } public Object[] getChildren() { - repoElem.connect(); Session session = null; try { Repository repository = repoElem.getRepository(); - Node repoNode = repoElem.getRepoNode(); session = repository.login(repoElem.getCredentials()); String[] workspaceNames = session.getWorkspace() .getAccessibleWorkspaceNames(); List distributionElems = new ArrayList(); - for (String workspaceName : workspaceNames) { + buildWksp: for (String workspaceName : workspaceNames) { + + // Filter non-public workspaces for user anonymous. + if (repoElem.getRepoNode() == null) { + Session tmpSession = null; + try { + tmpSession = repository.login(workspaceName); + Boolean res = true; + try { + tmpSession.checkPermission("/", "read"); + } catch (AccessControlException e) { + res = false; + } + if (!res) + continue buildWksp; + } catch (RepositoryException e) { + throw new SlcException( + "Cannot list workspaces for anonymous user", e); + } finally { + JcrUtils.logoutQuietly(tmpSession); + } + } + // filter technical workspaces if (workspaceName.startsWith(name)) { - Node workspaceNode = repoNode.hasNode(workspaceName) ? repoNode - .getNode(workspaceName) : repoNode - .addNode(workspaceName); distributionElems.add(new WorkspaceElem(repoElem, - workspaceNode)); - // FIXME remove deleted workspaces + workspaceName)); } } return distributionElems.toArray();