Tomas Jelinek has uploaded a new change for review. Change subject: frontend,engine: inherit template permissions on VM creation ......................................................................
frontend,engine: inherit template permissions on VM creation A new checkbox "Copy Template Permissions" has been introduced into the new VM dialog (only to this one - no other dialogs have it). It is visible only when a non blank template is selected. If it is checked, all the template permissions (only the direct ones not the inherited) are copied to the VM. Change-Id: I6e6fddcea410ab8fee5851468980b8eeb0dad428 Signed-off-by: Tomas Jelinek <tjeli...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmFromTemplateParameters.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java 9 files changed, 77 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/15667/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java index 52cddc0..c78b803 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java @@ -1,10 +1,12 @@ package org.ovirt.engine.core.bll; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.ovirt.engine.core.bll.job.ExecutionHandler; +import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AddVmFromTemplateParameters; import org.ovirt.engine.core.common.action.CreateCloneOfTemplateParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -12,6 +14,7 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskImageBase; import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.businessentities.permissions; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -19,6 +22,7 @@ import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.PermissionDAO; @LockIdNameAttribute(isReleaseAtEndOfExecute = false) public class AddVmFromTemplateCommand<T extends AddVmFromTemplateParameters> extends AddVmCommand<T> { @@ -44,7 +48,7 @@ Map<String, Pair<String, String>> locks = new HashMap<String, Pair<String, String>>(); locks.put(getVmTemplateId().toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.TEMPLATE, getTemplateSharedLockMessage())); - for (DiskImage image: getImagesToCheckDestinationStorageDomains()) { + for (DiskImage image : getImagesToCheckDestinationStorageDomains()) { locks.put(image.getId().toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.DISK, getDiskSharedLockMessage())); } @@ -60,8 +64,8 @@ private String getDiskSharedLockMessage() { if (cachedDiskSharedLockMessage == null) { cachedDiskSharedLockMessage = new StringBuilder(VdcBllMessages.ACTION_TYPE_FAILED_DISK_IS_USED_FOR_CREATE_VM.name()) - .append(String.format("$VmName %1$s", getVmName())) - .toString(); + .append(String.format("$VmName %1$s", getVmName())) + .toString(); } return cachedDiskSharedLockMessage; } @@ -77,6 +81,33 @@ if (getTaskIdList().isEmpty()) { endSuccessfully(); } + } + + @Override + protected void addVmPermission() { + super.addVmPermission(); + + if (!getParameters().isCopyTemplatePermissions()) { + return; + } + + PermissionDAO dao = getDbFacade().getPermissionDao(); + + List<permissions> templatePermissions = dao.getAllForEntity(getVmTemplateId(), getCurrentUser().getUserId(), false); + + List<permissions> vmPermissions = new ArrayList<permissions>(); + + for (permissions templatePermission : templatePermissions) { + vmPermissions.add(new permissions(getCurrentUser().getUserId(), templatePermission.getrole_id(), + getVmId(), VdcObjectType.VM)); + + } + + if (vmPermissions.size() > 0) { + MultiLevelAdministrationHandler.addPermission(vmPermissions.toArray(new permissions[vmPermissions.size()])); + } + + } @Override @@ -102,9 +133,9 @@ .getQuotaId() : null); VdcReturnValueBase result = Backend.getInstance().runInternalAction( - VdcActionType.CreateCloneOfTemplate, - p, - ExecutionHandler.createDefaultContexForTasks(getExecutionContext())); + VdcActionType.CreateCloneOfTemplate, + p, + ExecutionHandler.createDefaultContexForTasks(getExecutionContext())); /** * if couldnt create snapshot then stop the transaction and the command diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmFromTemplateParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmFromTemplateParameters.java index f614e9b..8d3206c 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmFromTemplateParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmFromTemplateParameters.java @@ -12,6 +12,9 @@ public Guid OriginalTemplate = Guid.Empty; + + private boolean copyTemplatePermissions = false; + public AddVmFromTemplateParameters(VmStatic vmStatic, HashMap<Guid, DiskImage> diskInfoDestinationMap, Guid storageDomainId) { super(vmStatic); @@ -25,4 +28,12 @@ public AddVmFromTemplateParameters(VM vm, HashMap<Guid, DiskImage> diskInfoDestinationMap, Guid storageDomainId) { this(vm.getStaticData(), diskInfoDestinationMap, storageDomainId); } + + public boolean isCopyTemplatePermissions() { + return copyTemplatePermissions; + } + + public void setCopyTemplatePermissions(boolean copyTemplatePermissions) { + this.copyTemplatePermissions = copyTemplatePermissions; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index f3669d7..5e7309a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -346,6 +346,9 @@ @DefaultStringValue("Delete protection") String deleteProtectionPopup(); + @DefaultStringValue("Copy Template Permissions") + String copyTemplatePermissions(); + @DefaultStringValue("Smartcard enabled") String smartcardVmPopup(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java index 52f380f..a96e16e 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java @@ -175,6 +175,11 @@ @WithElementId("isDeleteProtected") public EntityModelCheckBoxEditor isDeleteProtectedEditor; + @UiField(provided = true) + @Path("copyTemplatePermissions.entity") + @WithElementId("copyTemplatePermissions") + public EntityModelCheckBoxEditor copyTemplatePermissionsEditor; + @UiField @Ignore Label generalWarningMessage; @@ -535,6 +540,7 @@ isStatelessEditor = new EntityModelCheckBoxEditor(Align.RIGHT); isRunAndPauseEditor = new EntityModelCheckBoxEditor(Align.RIGHT); isDeleteProtectedEditor = new EntityModelCheckBoxEditor(Align.RIGHT); + copyTemplatePermissionsEditor = new EntityModelCheckBoxEditor(Align.RIGHT); isSmartcardEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); cdAttachedEditor = new EntityModelCheckBoxEditor(Align.LEFT); allowConsoleReconnectEditor = new EntityModelCheckBoxEditor(Align.RIGHT); @@ -782,6 +788,7 @@ isStatelessEditor.setLabel(constants.statelessVmPopup()); isRunAndPauseEditor.setLabel(constants.runAndPauseVmPopup()); isDeleteProtectedEditor.setLabel(constants.deleteProtectionPopup()); + copyTemplatePermissionsEditor.setLabel(constants.copyTemplatePermissions()); isSmartcardEnabledEditor.setLabel(constants.smartcardVmPopup()); // Pools Tab diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml index 70e0097..8d06056 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml @@ -296,6 +296,7 @@ <e:EntityModelCheckBoxEditor ui:field="isStatelessEditor" addStyleNames="{style.checkbox}" /> <e:EntityModelCheckBoxEditor ui:field="isRunAndPauseEditor" addStyleNames="{style.checkbox}" /> <e:EntityModelCheckBoxEditor ui:field="isDeleteProtectedEditor" addStyleNames="{style.checkbox}" /> + <e:EntityModelCheckBoxEditor ui:field="copyTemplatePermissionsEditor" addStyleNames="{style.checkbox}" /> </g:FlowPanel> <g:FlowPanel addStyleNames="{style.sectionPanel}"> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java index a2ee542..1a0a220 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java @@ -1105,6 +1105,7 @@ unitVmModel.getDisksAllocationModel().getImageToDestinationDomainMap(), Guid.Empty); param.setMakeCreatorExplicitOwner(true); + param.setCopyTemplatePermissions((Boolean) unitVmModel.getCopyTemplatePermissions().getEntity()); ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); parameters.add(param); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java index 1d0f6a7..fe368fa 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java @@ -151,6 +151,7 @@ getModel().getProvisioning().setIsChangable(true); getModel().setIsBlankTemplate(false); + getModel().getCopyTemplatePermissions().setIsAvailable(true); initDisks(); } else @@ -160,6 +161,7 @@ getModel().setIsBlankTemplate(true); getModel().setIsDisksAvailable(false); + getModel().getCopyTemplatePermissions().setIsAvailable(false); getModel().setDisks(null); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java index 5fbc5cb..c1ea5f0 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java @@ -644,6 +644,16 @@ this.privateIsDeleteProtected = deleteProtected; } + private NotChangableForVmInPoolEntityModel copyTemplatePermissions; + + public EntityModel getCopyTemplatePermissions() { + return copyTemplatePermissions; + } + + private void setCopyTemplatePermissions(NotChangableForVmInPoolEntityModel copyTemplatePermissions) { + this.copyTemplatePermissions = copyTemplatePermissions; + } + private NotChangableForVmInPoolListModel privateDisplayProtocol; public ListModel getDisplayProtocol() @@ -1082,6 +1092,10 @@ setIsRunAndPause(new NotChangableForVmInPoolEntityModel()); setIsSmartcardEnabled(new NotChangableForVmInPoolEntityModel()); setIsDeleteProtected(new NotChangableForVmInPoolEntityModel()); + setCopyTemplatePermissions(new NotChangableForVmInPoolEntityModel()); + // by default not available - only for new VM + getCopyTemplatePermissions().setIsAvailable(false); + getCopyTemplatePermissions().setEntity(false); setVncKeyboardLayout(new NotChangableForVmInPoolListModel()); setCdImage(new NotChangableForVmInPoolListModel()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java index 45d91dc..e62f287 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java @@ -2066,6 +2066,7 @@ unitVmModel.getDisksAllocationModel().getImageToDestinationDomainMap(), Guid.Empty); + param.setCopyTemplatePermissions((Boolean) model.getCopyTemplatePermissions().getEntity()); ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); parameters.add(param); -- To view, visit http://gerrit.ovirt.org/15667 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6e6fddcea410ab8fee5851468980b8eeb0dad428 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches