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: 53316b0bab
pull/2/head
parent
5e283ffe5b
commit
7f8521f84e
|
|
@ -318,11 +318,16 @@ public abstract class AbstractAssetForm<T extends Asset>
|
|||
}
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
@ -596,6 +602,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<String, String> privilegeNameMap = new HashMap<>();
|
||||
Arrays
|
||||
.stream(privileges)
|
||||
.forEach(privilege -> privilegeNameMap.put(privilege, privilege));
|
||||
final CcmObjectSelectionModel<CcmObject> 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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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<CMSPermissionsTableRow> buildDirectPermissionsRows(
|
||||
final CcmObject object) {
|
||||
final CcmObject object, final String[] privileges) {
|
||||
|
||||
final Optional<ContentSection> 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<String> privileges = permissionManager
|
||||
.listDefiniedPrivileges(ItemPrivileges.class);
|
||||
final CcmObject object,
|
||||
final String[] privileges) {
|
||||
|
||||
final List<CMSPermissionsTableColumn> columns = privileges.stream()
|
||||
final List<CMSPermissionsTableColumn> columns = Arrays
|
||||
.stream(privileges)
|
||||
.map(privilege -> buildColumn(role, object, privilege))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
|
|
|
|||
|
|
@ -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<CMSPermissionsTableRow> 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
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> privileges = permissionManager
|
||||
// .listDefiniedPrivileges(ItemPrivileges.class);
|
||||
// final List<Label> headerLabels = privileges.stream()
|
||||
// .map(privilege -> generatePrivilegeColumnHeader(privilege))
|
||||
// .collect(Collectors.toList());
|
||||
// headerLabels.add(0,
|
||||
// new Label(new GlobalizedMessage(
|
||||
// "cms.ui.permissions.table.role_header",
|
||||
// CmsConstants.CMS_BUNDLE)));
|
||||
// headerLabels.add(new Label(new GlobalizedMessage(
|
||||
// "cms.ui.permissions.table.remove_all.header",
|
||||
// CmsConstants.CMS_BUNDLE)));
|
||||
// final Table table = new Table(
|
||||
// new PermissionsTableModelBuilder(),
|
||||
// headerLabels.toArray());
|
||||
// table.setClassAttr("dataTable");
|
||||
// for (int j = 1; j < table.getColumnModel().size() - 1; j++) {
|
||||
// table.getColumn(j).setKey(privileges.get(j - 1));
|
||||
// table.getColumn(j).setCellRenderer(new TableCellRenderer() {
|
||||
//
|
||||
// @Override
|
||||
// public Component getComponent(final Table table,
|
||||
// final PageState state,
|
||||
// final Object value,
|
||||
// final boolean isSelected,
|
||||
// final Object key,
|
||||
// final int row,
|
||||
// final int column) {
|
||||
//
|
||||
// final ControlLink link = new ControlLink("");
|
||||
//
|
||||
// final CMSPermissionsTableColumn col
|
||||
// = (CMSPermissionsTableColumn) value;
|
||||
// if (col.isPermitted()) {
|
||||
// link.setClassAttr("checkBoxChecked");
|
||||
// } else {
|
||||
// link.setClassAttr("checkBoxUnchecked");
|
||||
// }
|
||||
//
|
||||
// return link;
|
||||
// }
|
||||
//
|
||||
// });
|
||||
// }
|
||||
// table.getColumn(table.getColumnModel().size() - 1).setCellRenderer(
|
||||
// new TableCellRenderer() {
|
||||
//
|
||||
// @Override
|
||||
// public Component getComponent(final Table table,
|
||||
// final PageState state,
|
||||
// final Object value,
|
||||
// final boolean isSelected,
|
||||
// final Object key,
|
||||
// final int row,
|
||||
// final int column) {
|
||||
// final ControlLink link = new ControlLink(new Label(
|
||||
// new GlobalizedMessage(
|
||||
// "cms.ui.permissions.table.actions.remove_all",
|
||||
// CmsConstants.CMS_BUNDLE)));
|
||||
// link.setConfirmation(new GlobalizedMessage(
|
||||
// "cms.ui.permissions.table.actions.remove_all.confirm",
|
||||
// CmsConstants.CMS_BUNDLE));
|
||||
//
|
||||
// return link;
|
||||
// }
|
||||
//
|
||||
// });
|
||||
// table.addTableActionListener(new TableActionListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void cellSelected(final TableActionEvent event)
|
||||
// throws FormProcessException {
|
||||
//
|
||||
// final PageState state = event.getPageState();
|
||||
// final int columnIndex = event.getColumn();
|
||||
// if (event.getRowKey() == null) {
|
||||
// return;
|
||||
// }
|
||||
// final String roleName = (String) event.getRowKey();
|
||||
//
|
||||
// final Table table = (Table) event.getSource();
|
||||
// final int columnCount = table.getColumnModel().size();
|
||||
// final int lastColumnIndex = columnCount - 1;
|
||||
//
|
||||
// final CcmObject object = itemSelectionModel
|
||||
// .getSelectedItem(state);
|
||||
// final RoleRepository roleRepo = cdiUtil.findBean(
|
||||
// RoleRepository.class);
|
||||
// final Optional<Role> role = roleRepo.findByName(roleName);
|
||||
// if (!role.isPresent()) {
|
||||
// throw new UnexpectedErrorException(String.format(
|
||||
// "Role \"%s\" was not found inthe database, but was in "
|
||||
// + "the permissions table.",
|
||||
// roleName));
|
||||
// }
|
||||
// final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||
// PermissionChecker.class);
|
||||
// if (columnIndex > 0 && columnIndex < lastColumnIndex) {
|
||||
// final String privilege = table.getColumn(columnIndex)
|
||||
// .getKey();
|
||||
//
|
||||
// if (permissionChecker.isPermitted(privilege,
|
||||
// object,
|
||||
// role.get())) {
|
||||
// permissionManager.revokePrivilege(privilege,
|
||||
// role.get(),
|
||||
// object);
|
||||
// } else {
|
||||
// permissionManager.grantPrivilege(privilege,
|
||||
// role.get(),
|
||||
// object);
|
||||
// }
|
||||
// } else if (columnIndex == lastColumnIndex) {
|
||||
// final List<String> privileges = permissionManager
|
||||
// .listDefiniedPrivileges(ItemPrivileges.class);
|
||||
// privileges.forEach(privilege -> permissionManager
|
||||
// .revokePrivilege(privilege, role.get(), object));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void headSelected(final TableActionEvent event) {
|
||||
// //Nothing
|
||||
// }
|
||||
//
|
||||
// });
|
||||
//
|
||||
// panel.add(table);
|
||||
// }
|
||||
private Label generatePrivilegeColumnHeader(final String privilege) {
|
||||
return new Label(new GlobalizedMessage(
|
||||
String.format("cms.ui.permissions.table.privilege.headers.%s",
|
||||
privilege),
|
||||
CmsConstants.CMS_BUNDLE));
|
||||
}
|
||||
|
||||
private class PermissionsTableModelBuilder extends LockableImpl
|
||||
implements TableModelBuilder {
|
||||
|
||||
@Override
|
||||
public TableModel makeModel(final Table table, final PageState state) {
|
||||
final CcmObject object = itemSelectionModel.getSelectedItem(state);
|
||||
return new CMSPermissionsTableModel(object);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// private class PermissionsTableModel implements TableModel {
|
||||
//
|
||||
// private final Iterator<PermissionsTableRow> iterator;
|
||||
// private PermissionsTableRow currentRow;
|
||||
//
|
||||
// public PermissionsTableModel(final CcmObject object) {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -522,3 +522,8 @@ cms.ui.item.lifecycle.republish_and_reset=Republish and reset lifecycle
|
|||
cms.ui.search.help=Enter some search terms
|
||||
item_permissions_step.label=Permissions
|
||||
item_permissions_step.description=Edit permissions for this content item
|
||||
cms.ui.permissions.table.privilege.headers.create_new_assets=Create new assets
|
||||
cms.ui.permissions.table.privilege.headers.delete_assets=Delete assets
|
||||
cms.ui.permissions.table.privilege.headers.edit_asset=
|
||||
cms.ui.permissions.table.privilege.headers.use_asset=Use assets
|
||||
cms.ui.permissions.table.privilege.headers.view_asset=View assets
|
||||
|
|
|
|||
|
|
@ -519,3 +519,8 @@ cms.ui.item.lifecycle.republish_and_reset=Erneut publizieren und Lebenszyklus zu
|
|||
cms.ui.search.help=Enter some search terms
|
||||
item_permissions_step.label=Berechtigungen
|
||||
item_permissions_step.description=Berechtigungen f\u00fcr dieses Dokument bearbeiten
|
||||
cms.ui.permissions.table.privilege.headers.create_new_assets=Neue Assets anlegen
|
||||
cms.ui.permissions.table.privilege.headers.delete_assets=Assets l\u00f6schen
|
||||
cms.ui.permissions.table.privilege.headers.edit_asset=Assets bearbeiten
|
||||
cms.ui.permissions.table.privilege.headers.use_asset=Assets verwenden
|
||||
cms.ui.permissions.table.privilege.headers.view_asset=Assets ansehen
|
||||
|
|
|
|||
|
|
@ -481,3 +481,8 @@ cms.ui.item.lifecycle.republish_and_reset=Republish and reset lifecycle
|
|||
cms.ui.search.help=Enter some search terms
|
||||
item_permissions_step.label=Permissions
|
||||
item_permissions_step.description=Edit permissions for this content item
|
||||
cms.ui.permissions.table.privilege.headers.create_new_assets=Create new assets
|
||||
cms.ui.permissions.table.privilege.headers.delete_assets=Delete assets
|
||||
cms.ui.permissions.table.privilege.headers.edit_asset=Edit assets
|
||||
cms.ui.permissions.table.privilege.headers.use_asset=Use assets
|
||||
cms.ui.permissions.table.privilege.headers.view_asset=View assets
|
||||
|
|
|
|||
Loading…
Reference in New Issue