From b984e6ead47d47cb212dd1148bce52962cd6cbb1 Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 2 Mar 2018 08:31:00 +0000 Subject: [PATCH] CCM NG: Improvments for Permissions Management git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5321 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/ui/authoring/AuthoringKitWizard.java | 2 - .../CMSPermissionsTableController.java | 1 + .../permissions/CMSPermissionsTableModel.java | 23 +- .../permissions/CMSPermissionsTableRow.java | 11 + .../ui/permissions/ItemPermissionsStep.java | 248 ++++++++++++++++++ .../contentsection/ContentSectionConfig.java | 12 +- .../contenttypes/AuthoringKitInfo.java | 2 - .../org/librecms/CmsResources.properties | 2 + .../org/librecms/CmsResources_de.properties | 2 + .../org/librecms/CmsResources_fr.properties | 2 + 10 files changed, 292 insertions(+), 13 deletions(-) create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/ItemPermissionsStep.java diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/AuthoringKitWizard.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/AuthoringKitWizard.java index 2f3100918..0284caad5 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/AuthoringKitWizard.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/AuthoringKitWizard.java @@ -70,14 +70,12 @@ import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.workflow.Task; import org.libreccm.workflow.TaskRepository; import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentItem; import org.librecms.contenttypes.AuthoringKit; import org.librecms.contenttypes.AuthoringKitInfo; import org.librecms.contenttypes.AuthoringStepInfo; import org.librecms.contenttypes.ContentTypeInfo; import org.librecms.ui.authoring.ContentItemAuthoringStepInfo; import org.librecms.ui.authoring.ContentItemAuthoringStepManager; -import org.librecms.workflow.CmsTaskType; /** * This class represents a single authoring kit. The wizard accepts a 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 041885d0b..5070ed58e 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 @@ -85,6 +85,7 @@ class CMSPermissionsTableController { .collect(Collectors.toList()); final CMSPermissionsTableRow row = new CMSPermissionsTableRow(); + row.setObject(object); row.setRoleName(role.getName()); row.setColumns(columns); 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 4ec5b0f0f..dc1e6ce98 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 @@ -37,6 +37,7 @@ class CMSPermissionsTableModel implements TableModel { private CMSPermissionsTableRow currentRow; public CMSPermissionsTableModel(final CcmObject object) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CMSPermissionsTableController controller = cdiUtil.findBean( CMSPermissionsTableController.class); @@ -77,11 +78,23 @@ class CMSPermissionsTableModel implements TableModel { @Override public Object getKeyAt(final int columnIndex) { -// if (columnIndex == 0 || columnIndex == getColumnCount() - 1) { - return currentRow.getRoleName(); -// } else { -// return currentRow.getColumns().get(columnIndex - 1).getPrivilege(); -// } + + if (columnIndex == 0) { + return String.format("%s-%s-role", + currentRow.getObject().getUuid(), + currentRow.getRoleName()); + } else if (columnIndex >= currentRow.getColumns().size() - 1) { + return String.format("%s-%s-remove-all", + currentRow.getObject().getUuid(), + currentRow.getRoleName()); + } else { + return String.format( + "%s-%s-%s", + currentRow.getObject().getUuid(), + currentRow.getRoleName(), + currentRow.getColumns().get(columnIndex - 1).getPrivilege() + ); + } } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableRow.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableRow.java index 4f09a35c3..d1e9f8d92 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableRow.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/CMSPermissionsTableRow.java @@ -18,6 +18,8 @@ */ package com.arsdigita.cms.ui.permissions; +import org.libreccm.core.CcmObject; + import java.util.Collections; import java.util.List; import java.util.Objects; @@ -28,10 +30,19 @@ import java.util.Objects; */ class CMSPermissionsTableRow { + private CcmObject object; private String roleName; private List columns; + public CcmObject getObject() { + return object; + } + + public void setObject(final CcmObject object) { + this.object = object; + } + public String getRoleName() { return roleName; } 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 new file mode 100644 index 000000000..05e1768f4 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/permissions/ItemPermissionsStep.java @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2018 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.permissions; + +import com.arsdigita.bebop.BoxPanel; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Resettable; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.bebop.table.TableCellRenderer; +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.util.LockableImpl; + +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.core.CcmObject; +import org.libreccm.core.UnexpectedErrorException; +import org.libreccm.security.PermissionChecker; +import org.libreccm.security.PermissionManager; +import org.libreccm.security.Role; +import org.libreccm.security.RoleRepository; +import org.librecms.CmsConstants; +import org.librecms.contentsection.privileges.ItemPrivileges; +import org.librecms.ui.authoring.ContentItemAuthoringStep; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * + * @author Jens Pelzetter + */ +@ContentItemAuthoringStep( + labelBundle = CmsConstants.CMS_BUNDLE, + labelKey = "item_permissions_step.label", + descriptionBundle = CmsConstants.CMS_BUNDLE, + descriptionKey = "item_permissions_step.description" +) +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; + + 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