import javax.naming.ldap.LdapName;
import javax.security.auth.x500.X500Principal;
+import org.argeo.api.NodeConstants;
import org.argeo.cms.auth.CmsSession;
import org.argeo.entity.EntityType;
import org.argeo.jackrabbit.security.JackrabbitSecurityUtils;
Privilege.JCR_READ);
JcrUtils.addPrivilege(adminSession, userNode.getPath(), new X500Principal(userDn.toString()).getName(),
Privilege.JCR_READ);
+ JcrUtils.addPrivilege(adminSession, userNode.getPath(), NodeConstants.ROLE_USER_ADMIN,
+ Privilege.JCR_ALL);
} else {
userNode = usersBase.getNode(uid);
}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.api.NodeConstants;
import org.argeo.cms.Localized;
+import org.argeo.cms.auth.CurrentUser;
import org.argeo.cms.ui.CmsTheme;
import org.argeo.cms.ui.CmsUiProvider;
import org.argeo.cms.ui.CmsView;
private final static Log log = LogFactory.getLog(DefaultLeadPane.class);
public static enum Property {
- defaultLayers;
+ defaultLayers, adminLayers;
}
private Map<String, RankedObject<SuiteLayer>> layers = Collections.synchronizedSortedMap(new TreeMap<>());
private String[] defaultLayers;
+ private String[] adminLayers;
@Override
public Control createUi(Composite parent, Node node) throws RepositoryException {
}
}
+ // TODO factorise
+ boolean isAdmin = cmsView.doAs(() -> CurrentUser.isInRole(NodeConstants.ROLE_USER_ADMIN));
+ if (isAdmin)
+ for (String layerId : adminLayers) {
+ if (layers.containsKey(layerId)) {
+ RankedObject<SuiteLayer> layerObj = layers.get(layerId);
+
+ // TODO deal with i10n
+ String titleStr = (String) layerObj.getProperties().get(SuiteLayer.Property.title.name());
+ Localized title = null;
+ if (titleStr != null)
+ title = new Localized.Untranslated(titleStr);
+
+ String iconName = (String) layerObj.getProperties().get(SuiteLayer.Property.icon.name());
+ SuiteIcon icon = null;
+ if (iconName != null)
+ icon = SuiteIcon.valueOf(iconName);
+
+ Button b = createButton(parent, layerId, title, icon);
+ if (first == null)
+ first = b;
+ }
+ }
+
// Button dashboardB = createButton(parent, SuiteMsg.dashboard.name(), SuiteMsg.dashboard, SuiteIcon.dashboard);
if (!cmsView.isAnonymous()) {
// createButton(parent, SuiteMsg.documents.name(), SuiteMsg.documents, SuiteIcon.documents);
throw new IllegalArgumentException("Default layers must be set.");
if (log.isDebugEnabled())
log.debug("Default layers: " + Arrays.asList(defaultLayers));
+ adminLayers = (String[]) properties.get(Property.adminLayers.toString());
+ if (log.isDebugEnabled() && adminLayers != null)
+ log.debug("Admin layers: " + Arrays.asList(adminLayers));
}
public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
}
private <T> T findByType(Map<String, RankedObject<T>> byType, Node context) {
+ if (context == null)
+ throw new IllegalArgumentException("A node should be provided");
try {
// mixins
Set<String> types = new TreeSet<>();
suiteUi.getCmsView().sendEvent(SuiteEvent.switchLayer.topic(), SuiteEvent.eventProperties(node));
suiteUi.getCmsView().sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(node));
}
-
-// CmsView cmsView = CmsView.getCmsView(parent);
-// if (cmsView.isAnonymous())
-// return;
-// Session session = null;
-// try {
-// if (state != null && state.startsWith("/")) {
-// String path = state.substring(1);
-// String workspace;
-// if (path.equals("")) {
-// workspace = null;
-// path = "/";
-// } else {
-// int index = path.indexOf('/');
-// if (index == 0) {
-// log.error("Cannot interpret " + state);
-// cmsView.navigateTo("~");
-// return;
-// } else if (index > 0) {
-// workspace = path.substring(0, index);
-// path = path.substring(index);
-// } else {// index<0, assuming root node
-// workspace = path;
-// path = "/";
-// }
-// }
-// session = cmsView.doAs(() -> Jcr.login(getRepository(), workspace));
-//
-// Node node = session.getNode(path);
-//
-// cmsView.sendEvent(SuiteEvent.switchLayer.topic(), SuiteEvent.eventProperties(node));
-// cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(node));
-// }
-// } catch (RepositoryException e) {
-// log.error("Cannot load state " + state, e);
-// cmsView.navigateTo("~");
-// } finally {
-// JcrUtils.logoutQuietly(session);
-// }
}
private String nodeToState(Node node) {
path = "/";
}
}
-// session = cmsView.doAs(() -> Jcr.login(getRepository(), workspace));
-
Session session = suiteUi.getSession(workspace);
if (session == null)
return null;
// SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null;
if (isTopic(event, SuiteEvent.refreshPart)) {
Node node = getNode(ui, event);
+ if (node == null)
+ return;
CmsUiProvider uiProvider = findByType(uiProvidersByType, node);
SuiteLayer layer = findByType(layersByType, node);
ui.switchToLayer(layer, node);
ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node));
} else if (isTopic(event, SuiteEvent.openNewPart)) {
Node node = getNode(ui, event);
+ if (node == null)
+ return;
CmsUiProvider uiProvider = findByType(uiProvidersByType, node);
SuiteLayer layer = findByType(layersByType, node);
ui.switchToLayer(layer, node);