From 9c75cc56f4b4d691670eb773baaf00f8776e5f13 Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 23 Jul 2011 13:02:25 +0000 Subject: [PATCH] =?UTF-8?q?Tabelle=20zum=20Bearbeiten=20der=20Berechtigung?= =?UTF-8?q?en=20f=C3=BCr=20Content-Typen=20fertiggestellt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@1030 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/CMSResources.properties | 9 ++ .../arsdigita/cms/CMSResources_de.properties | 9 ++ .../cms/CMSResources_en_GB.properties | 9 ++ .../arsdigita/cms/CMSResources_fr.properties | 9 ++ .../cms/ui/type/TypePermissions.java | 56 ---------- .../cms/ui/type/TypePermissionsTable.java | 102 +++++++++++++----- 6 files changed, 110 insertions(+), 84 deletions(-) delete mode 100644 ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissions.java diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties index 68b3063b8..0e0bf4a5d 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties @@ -1067,3 +1067,12 @@ cms.ui.unknownRole=Unknown role cms.ui.unknownStatus=Unknown status cms.contenttypes.ui.genericorgaunit.persons.status=Status cms.ui.edit_assoc=Edit association +cms.ui.type.permissions=Permissions (Create new items of this type) +cms.ui.type.permissions.role=Role +cms.ui.type.permissions_can_use=Use this type +cms.ui.type.permission.action=Action +cms.ui.type.permissions.can_use.yes=Yes +cms.ui.type.permissions.actions.restrict_to_this_role=Restrict to this role +cms.ui.type.permissions.can_use.grant=Grant permissions to this role +cms.ui.type.permissions.actions.revoke=Revoke permission +cms.ui.type.permissions.can_use.no=No diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties index 2f076cc64..1f37e9a34 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties @@ -1058,3 +1058,12 @@ cms.ui.unknownRole=Unbekannte Rolle cms.ui.unknownStatus=Unbekannter status cms.contenttypes.ui.genericorgaunit.persons.status=Status cms.ui.edit_assoc=Verkn\u00fcpfung bearbeiten +cms.ui.type.permissions=Berechtigungen (Anlegen eines neues Items dieses Typs) +cms.ui.type.permissions.role=Rolle +cms.ui.type.permissions_can_use=Darf diesen Typ nutzen +cms.ui.type.permission.action=Aktion +cms.ui.type.permissions.can_use.yes=Ja +cms.ui.type.permissions.actions.restrict_to_this_role=Auf diese Rolle beschr\u00e4nken +cms.ui.type.permissions.can_use.grant=Rolle berechtigen +cms.ui.type.permissions.actions.revoke=Berechtigung widerrufen +cms.ui.type.permissions.can_use.no=Nein diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties index 706899595..8e456de2f 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties @@ -6,3 +6,12 @@ cms.ui.unknownStatus=Unknown status cms.contenttypes.ui.genericorgaunit.persons.status=Status cms.contenttypes.shared.basic_properties.title= cms.ui.edit_assoc= +cms.ui.type.permissions= +cms.ui.type.permissions.role= +cms.ui.type.permissions_can_use= +cms.ui.type.permission.action= +cms.ui.type.permissions.can_use.yes= +cms.ui.type.permissions.actions.restrict_to_this_role= +cms.ui.type.permissions.can_use.grant= +cms.ui.type.permissions.actions.revoke= +cms.ui.type.permissions.can_use.no= diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties index 6e2d9bed3..f29649b7f 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties @@ -537,3 +537,12 @@ cms.contenttypes.ui.address.email.desc=Means of contacting someone at this addre cms.contenttypes.ui.address.uri.desc=A URL to find more information about this Address (TRANSLATE THIS cms.contenttypes.ui.address.uri.desc) cms.contenttypes.shared.basic_properties.title= cms.ui.edit_assoc= +cms.ui.type.permissions= +cms.ui.type.permissions.role= +cms.ui.type.permissions_can_use= +cms.ui.type.permission.action= +cms.ui.type.permissions.can_use.yes= +cms.ui.type.permissions.actions.restrict_to_this_role= +cms.ui.type.permissions.can_use.grant= +cms.ui.type.permissions.actions.revoke= +cms.ui.type.permissions.can_use.no= diff --git a/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissions.java b/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissions.java deleted file mode 100644 index c51d2c403..000000000 --- a/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissions.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.arsdigita.cms.ui.type; - -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.SingleSelect; -import com.arsdigita.bebop.parameters.NotNullValidationListener; -import com.arsdigita.bebop.parameters.ParameterModel; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.cms.CMS; -import com.arsdigita.cms.ContentSection; -import com.arsdigita.cms.ui.authoring.BasicItemForm; -import com.arsdigita.cms.util.GlobalizationUtil; -import com.arsdigita.kernel.Group; -import com.arsdigita.kernel.RoleCollection; -import com.arsdigita.kernel.ui.ACSObjectSelectionModel; - -/** - * - * @author Jens Pelzetter - * @version $Id$ - */ -public class TypePermissions extends BasicItemForm { - - private static final String ROLE = "role"; - private final ACSObjectSelectionModel typeModel; - private SingleSelect roleSelect; - - public TypePermissions(final ACSObjectSelectionModel typeModel) { - super("typePermissions", null); - - this.typeModel = typeModel; - } - - @Override - public void addWidgets() { - //super.addWidgets(); - - add(new Label(GlobalizationUtil.globalize( - "cms.ui.type.permissions.select_role"))); - ParameterModel roleModel = new StringParameter(ROLE); - roleSelect = new SingleSelect(roleModel); - roleSelect.addValidationListener(new NotNullValidationListener()); - add(roleSelect); - } - - @Override - public void init(FormSectionEvent e) throws FormProcessException { - - } - - @Override - public void process(FormSectionEvent e) throws FormProcessException { - } -} diff --git a/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissionsTable.java b/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissionsTable.java index fe8d68f84..49c607734 100644 --- a/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissionsTable.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/type/TypePermissionsTable.java @@ -1,9 +1,13 @@ package com.arsdigita.cms.ui.type; +import com.arsdigita.bebop.Column; import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.table.TableColumnModel; @@ -11,23 +15,28 @@ import com.arsdigita.bebop.table.TableModel; import com.arsdigita.bebop.table.TableModelBuilder; import com.arsdigita.cms.CMS; import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.dispatcher.Utilities; import com.arsdigita.cms.ui.ContentSectionRequestLocal; import com.arsdigita.cms.util.GlobalizationUtil; +import com.arsdigita.cms.util.SecurityConstants; import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.Role; import com.arsdigita.kernel.RoleCollection; import com.arsdigita.kernel.permissions.ObjectPermissionCollection; import com.arsdigita.kernel.permissions.PermissionDescriptor; import com.arsdigita.kernel.permissions.PermissionService; import com.arsdigita.kernel.permissions.PrivilegeDescriptor; import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; +import java.math.BigInteger; /** * * @author Jens Pelzetter * @version $Id$ */ -public class TypePermissionsTable extends Table { +public class TypePermissionsTable extends Table implements TableActionListener { private final String TABLE_COL_ROLE = "table_col_role"; private final String TABLE_COL_CAN_USE = "table_col_can_use"; @@ -68,6 +77,41 @@ public class TypePermissionsTable extends Table { columnModel.get(0).setCellRenderer(new RoleCellRenderer()); columnModel.get(1).setCellRenderer(new CanUseCellRenderer()); columnModel.get(2).setCellRenderer(new ActionCellRenderer()); + + addTableActionListener(this); + } + + public void cellSelected(final TableActionEvent event) { + PageState state = event.getPageState(); + + TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + if (TABLE_COL_ACTION.equals(column.getHeaderKey().toString())) { + Role role = new Role(new BigDecimal(event.getRowKey().toString())); + ContentType contentType = getType().getContentType(state); + ObjectPermissionCollection permissions = + PermissionService. + getDirectGrantedPermissions(contentType.getOID()); + + if ((permissions.size() == 0)) { + role.grantPermission(contentType, + PrivilegeDescriptor.get( + com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); + } else if (!role.checkPermission(contentType, PrivilegeDescriptor. + get(com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { + role.grantPermission(contentType, + PrivilegeDescriptor.get( + com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); + } else { + role.revokePermission(contentType, + PrivilegeDescriptor.get( + com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); + } + } + } + + public void headSelected(final TableActionEvent event) { + //Nothing to do } private class TypePermissionsTableModelBuilder @@ -126,50 +170,36 @@ public class TypePermissionsTable extends Table { case 1: if (permissions.size() == 0) { return "cms.ui.type.permissions.can_use.yes"; - } else { - Party party = Kernel.getContext().getParty(); - if (party == null) { - party = Kernel.getPublicUser(); - } - PermissionDescriptor create = - new PermissionDescriptor(PrivilegeDescriptor. + } else { + if (roles.getRole().checkPermission(contentType, + PrivilegeDescriptor. get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM), - contentType, - party); - if (PermissionService.checkPermission(create)) { + com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { return "cms.ui.type.permissions.can_use.yes"; } else { return "cms.ui.type.permissions.can_use.no"; } - } + } case 2: - if (permissions.size() == 0) { + if (permissions.size() == 0) { return "cms.ui.type.permissions.actions.restrict_to_this_role"; } else { - Party party = Kernel.getContext().getParty(); - if (party == null) { - party = Kernel.getPublicUser(); - } - PermissionDescriptor create = - new PermissionDescriptor(PrivilegeDescriptor. + if (roles.getRole().checkPermission(contentType, + PrivilegeDescriptor. get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM), - contentType, - party); - if (PermissionService.checkPermission(create)) { + com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { return "cms.ui.type.permissions.actions.revoke"; } else { return "cms.ui.type.permissions.can_use.grant"; } - } + } default: return null; } } public Object getKeyAt(int columnIndex) { - return columnIndex; + return roles.getRole().getID(); } } @@ -199,7 +229,7 @@ public class TypePermissionsTable extends Table { Object key, int row, int column) { - return new Label(value.toString()); + return new Label(GlobalizationUtil.globalize(value.toString())); } } @@ -214,7 +244,23 @@ public class TypePermissionsTable extends Table { Object key, int row, int column) { - return new Label(value.toString()); + com.arsdigita.cms.SecurityManager securityManager = Utilities. + getSecurityManager(state); + Party party = Kernel.getContext().getParty(); + if (party == null) { + party = Kernel.getPublicUser(); + } + if (securityManager.canAccess(party, + SecurityConstants.CONTENT_TYPE_ADMIN)) { + ControlLink link = new ControlLink((String)GlobalizationUtil.globalize( + value.toString()).localize()); + + return link; + } else { + return new Label(value.toString()); + } + + } }