From 7f8521f84e8a93467fabf68a18a7f4fa128a7d82 Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 3 Mar 2018 10:41:29 +0000 Subject: [PATCH] CCM NG: UI for managing permissions for assets git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5325 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: 53316b0bab7b96a8a4f4d6aaaec370a34f68726f --- .../cms/ui/assets/AbstractAssetForm.java | 9 +- .../cms/ui/assets/AssetFolderBrowser.java | 2 - .../arsdigita/cms/ui/assets/AssetPane.java | 38 +++- .../cms/ui/folder/FolderSelectionModel.java | 2 - .../CMSPermissionsTableController.java | 14 +- .../permissions/CMSPermissionsTableModel.java | 22 +-- .../CMSPermissionsTableModelBuilder.java | 2 +- .../ui/permissions/ItemPermissionsStep.java | 187 +----------------- .../org/librecms/CmsResources.properties | 5 + .../org/librecms/CmsResources_de.properties | 5 + .../org/librecms/CmsResources_fr.properties | 5 + 11 files changed, 76 insertions(+), 215 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AbstractAssetForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AbstractAssetForm.java index d10414413..64d6c708c 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AbstractAssetForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AbstractAssetForm.java @@ -318,11 +318,16 @@ public abstract class AbstractAssetForm } protected Locale getSelectedLocale(final PageState state) { - final String selected = (String) showLocaleSelect.getValue(state); + + final Object selected = showLocaleSelect.getValue(state); if (selected == null) { return KernelConfig.getConfig().getDefaultLocale(); + } else if(selected instanceof Locale) { + return (Locale) selected; + } else if(selected instanceof String) { + return new Locale((String) selected); } else { - return new Locale(selected); + return new Locale(selected.toString()); } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java index 312b33171..b5a70488b 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java @@ -92,8 +92,6 @@ public class AssetFolderBrowser extends Table { private void initComponents() { - setModelBuilder(new AssetFolderBrowserTableModelBuilder()); - final GlobalizedMessage[] headers = { new GlobalizedMessage("cms.ui.folder.name", CMS_FOLDER_BUNDLE), diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java index 7812edefd..cea15f621 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java @@ -67,9 +67,11 @@ import com.arsdigita.cms.ui.folder.FolderRequestLocal; import com.arsdigita.cms.ui.folder.FolderSelectionModel; import com.arsdigita.cms.ui.folder.FolderTreeModelBuilder; import com.arsdigita.cms.ui.folder.FolderTreeModelController; +import com.arsdigita.cms.ui.permissions.CMSPermissionsPane; import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.LayoutPanel; +import com.arsdigita.ui.CcmObjectSelectionModel; import java.lang.reflect.InvocationTargetException; @@ -88,6 +90,7 @@ import org.libreccm.categorization.CategoryManager; import org.libreccm.core.CcmObject; import org.libreccm.core.UnexpectedErrorException; import org.libreccm.security.PermissionChecker; +import org.libreccm.security.PermissionManager; import org.librecms.assets.AssetTypeInfo; import org.librecms.assets.AssetTypesManager; import org.librecms.contentsection.Asset; @@ -95,9 +98,12 @@ import org.librecms.contentsection.AssetManager; import org.librecms.contentsection.AssetRepository; import org.librecms.contentsection.FolderManager; import org.librecms.contentsection.FolderRepository; +import org.librecms.contentsection.privileges.AssetPrivileges; import org.librecms.contentsection.privileges.ItemPrivileges; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; import java.util.ResourceBundle; import java.util.TooManyListenersException; @@ -142,6 +148,7 @@ public class AssetPane extends LayoutPanel implements Resettable { private SegmentedPanel.Segment newFolderSegment; private SegmentedPanel.Segment editFolderSegment; private SegmentedPanel.Segment editAssetSegment; + private SegmentedPanel.Segment folderPermissionsSegment; @SuppressWarnings("unchecked") public AssetPane() { @@ -337,7 +344,6 @@ public class AssetPane extends LayoutPanel implements Resettable { // // }); // currentFolderSegment.add(currentFolderLabel); - actionsSegment = panel.addSegment(); actionsSegment.setIdAttr("folder-browse"); @@ -570,7 +576,7 @@ public class AssetPane extends LayoutPanel implements Resettable { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final AssetTypesManager typesManager = cdiUtil .findBean(AssetTypesManager.class); - + if (selectedAssetModel.isSelected(state)) { target.setLabel( new GlobalizedMessage( @@ -585,7 +591,7 @@ public class AssetPane extends LayoutPanel implements Resettable { typeInfo.getLabelBundle()); final String typeLabel = bundle .getString(typeInfo.getLabelKey()); - + target.setLabel(new GlobalizedMessage( "cms.ui.admin.assets.create", CmsConstants.CMS_BUNDLE, @@ -595,6 +601,25 @@ public class AssetPane extends LayoutPanel implements Resettable { })); editAssetSegment.add(editAssetForm); + + folderPermissionsSegment = panel.addSegment(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final PermissionManager permissionManager = cdiUtil + .findBean(PermissionManager.class); + final String[] privileges = permissionManager + .listDefiniedPrivileges(AssetPrivileges.class) + .toArray(new String[]{}); + final Map privilegeNameMap = new HashMap<>(); + Arrays + .stream(privileges) + .forEach(privilege -> privilegeNameMap.put(privilege, privilege)); + final CcmObjectSelectionModel objSelectionModel + = new CcmObjectSelectionModel<>( + CcmObject.class, folderSelectionModel); + final CMSPermissionsPane folderPermissionsPane = new CMSPermissionsPane( + privileges, privilegeNameMap, objSelectionModel); + folderPermissionsSegment.add(folderPermissionsPane); + return panel; @@ -610,7 +635,7 @@ public class AssetPane extends LayoutPanel implements Resettable { newFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, false); editAssetSegment.setVisible(state, false); - + folderPermissionsSegment.setVisible(state, true); } protected void moveCopyMode(final PageState state) { @@ -624,6 +649,7 @@ public class AssetPane extends LayoutPanel implements Resettable { editFolderSegment.setVisible(state, false); targetSelector.expose(state); editAssetSegment.setVisible(state, false); + folderPermissionsSegment.setVisible(state, false); } protected void newFolderMode(final PageState state) { @@ -636,6 +662,7 @@ public class AssetPane extends LayoutPanel implements Resettable { newFolderSegment.setVisible(state, true); editFolderSegment.setVisible(state, false); editAssetSegment.setVisible(state, false); + folderPermissionsSegment.setVisible(state, false); } protected void editFolderMode(final PageState state) { @@ -646,6 +673,7 @@ public class AssetPane extends LayoutPanel implements Resettable { newFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, true); editAssetSegment.setVisible(state, false); + folderPermissionsSegment.setVisible(state, false); } protected void editAssetMode(final PageState state) { @@ -656,6 +684,7 @@ public class AssetPane extends LayoutPanel implements Resettable { newFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, false); editAssetSegment.setVisible(state, true); + folderPermissionsSegment.setVisible(state, false); } @Override @@ -675,6 +704,7 @@ public class AssetPane extends LayoutPanel implements Resettable { page.setVisibleDefault(newFolderSegment, false); page.setVisibleDefault(editFolderSegment, false); page.setVisibleDefault(editAssetSegment, false); + page.setVisibleDefault(folderPermissionsSegment, true); page.addComponentStateParam(this, actionParameter); page.addComponentStateParam(this, sourcesParameter); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java index 5e9fc5dee..82e46d7ae 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java @@ -20,12 +20,10 @@ package com.arsdigita.cms.ui.folder; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.cms.CMS; import com.arsdigita.ui.CcmObjectSelectionModel; import org.libreccm.categorization.Category; -import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.Folder; /** diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableController.java index 5070ed58e..32bd79cd4 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableController.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableController.java @@ -27,8 +27,8 @@ import org.libreccm.security.PermissionManager; import org.libreccm.security.Role; import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSectionRepository; -import org.librecms.contentsection.privileges.ItemPrivileges; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -56,7 +56,7 @@ class CMSPermissionsTableController { @Transactional(Transactional.TxType.REQUIRED) public List buildDirectPermissionsRows( - final CcmObject object) { + final CcmObject object, final String[] privileges) { final Optional section = sectionRepo.findById(CMS .getContext().getContentSection().getObjectId()); @@ -68,7 +68,7 @@ class CMSPermissionsTableController { .getRoles(); return roles.stream() - .map(role -> buildRow(role, object)) + .map(role -> buildRow(role, object, privileges)) .sorted((row1, row2) -> { return row1.getRoleName().compareTo(row2.getRoleName()); }) @@ -76,11 +76,11 @@ class CMSPermissionsTableController { } private CMSPermissionsTableRow buildRow(final Role role, - final CcmObject object) { - final List privileges = permissionManager - .listDefiniedPrivileges(ItemPrivileges.class); + final CcmObject object, + final String[] privileges) { - final List columns = privileges.stream() + final List columns = Arrays + .stream(privileges) .map(privilege -> buildColumn(role, object, privilege)) .collect(Collectors.toList()); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModel.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModel.java index 819ed7786..d5e476962 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModel.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModel.java @@ -22,8 +22,6 @@ import com.arsdigita.bebop.table.TableModel; import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.core.CcmObject; -import org.libreccm.security.PermissionManager; -import org.librecms.contentsection.privileges.ItemPrivileges; import java.util.Iterator; @@ -33,26 +31,28 @@ import java.util.Iterator; */ class CMSPermissionsTableModel implements TableModel { + private final String[] privileges; private final Iterator iterator; private CMSPermissionsTableRow currentRow; - public CMSPermissionsTableModel(final CcmObject object) { - + public CMSPermissionsTableModel(final CcmObject object, + final String[] privileges) { + + this.privileges = privileges; + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CMSPermissionsTableController controller = cdiUtil.findBean( CMSPermissionsTableController.class); - iterator = controller.buildDirectPermissionsRows(object).iterator(); + iterator = controller + .buildDirectPermissionsRows(object,privileges) + .iterator(); } @Override public int getColumnCount() { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionManager permissionManager = cdiUtil.findBean( - PermissionManager.class); - - return permissionManager.listDefiniedPrivileges(ItemPrivileges.class) - .size() + 2; + + return privileges.length + 2; } @Override diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModelBuilder.java index 46c2ea2dd..d644ea2dd 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModelBuilder.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableModelBuilder.java @@ -42,7 +42,7 @@ class CMSPermissionsTableModelBuilder extends LockableImpl @Override public TableModel makeModel(final Table table, final PageState state) { final CcmObject object = parent.getObject(state); - return new CMSPermissionsTableModel(object); + return new CMSPermissionsTableModel(object, parent.getPrivileges()); } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/ItemPermissionsStep.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/ItemPermissionsStep.java index 2b36654a0..1b1e48092 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/ItemPermissionsStep.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/ItemPermissionsStep.java @@ -19,19 +19,12 @@ package com.arsdigita.cms.ui.permissions; import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.Table; import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; import com.arsdigita.cms.CMS; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.ResettableContainer; -import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.ui.CcmObjectSelectionModel; -import com.arsdigita.util.LockableImpl; import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.core.CcmObject; @@ -56,15 +49,11 @@ import java.util.Map; ) public class ItemPermissionsStep extends ResettableContainer { - private final ItemSelectionModel itemSelectionModel; - public ItemPermissionsStep(final ItemSelectionModel itemSelectionModel, final AuthoringKitWizard authoringKitWizard, final StringParameter selectedLanguage) { - super("cms:permissionsStep", CMS.CMS_XML_NS); - - this.itemSelectionModel = itemSelectionModel; + super("cms:permissionsStep", CMS.CMS_XML_NS); final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); super.add(panel); @@ -88,178 +77,4 @@ public class ItemPermissionsStep extends ResettableContainer { panel.add(permissionsPane); } -// public ItemPermissionsStep(final ItemSelectionModel itemSelectionModel, -// final AuthoringKitWizard authoringKitWizard, -// final StringParameter selectedLanguage) { -// super("cms:permissionsStep", CMS.CMS_XML_NS); -// -// this.itemSelectionModel = itemSelectionModel; -// -// final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); -// final Label header = new Label(new GlobalizedMessage( -// "cms.ui.permissions.table.header", -// CmsConstants.CMS_BUNDLE)); -// panel.add(header); -// super.add(panel); -// -// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); -// final PermissionManager permissionManager = cdiUtil.findBean( -// PermissionManager.class); -// final List privileges = permissionManager -// .listDefiniedPrivileges(ItemPrivileges.class); -// final List