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

Reply via email to