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 7d6eddd378d..b85cebf60db 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 @@ -647,6 +647,8 @@ public interface CommonApplicationConstants extends Constants { String removePermission(); + String removeDirectSystemPermissions(); + String objectPermission(); String addSystemPermission(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties index 676d9def608..50bbad8a5f4 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties @@ -636,6 +636,7 @@ registerDisksLabel=Register Disks remoteDesktop=Remote Desktop removeConfirmationPopupMessage=Are you sure you want to remove the following items? removeDisk=Remove +removeDirectSystemPermissions=Remove Direct System Permissions removeInterface=Remove removePermission=Remove removeProfile=Remove diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants_ru.properties b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants_ru.properties index ac998d47d1a..8ade4b0c372 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants_ru.properties +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants_ru.properties @@ -549,6 +549,7 @@ registerDisksLabel=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\ remoteDesktop=\u0423\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u0439 \u0440\u0430\u0431\u043E\u0447\u0438\u0439 \u0441\u0442\u043E\u043B removeConfirmationPopupMessage=\u0412\u044B \u0442\u043E\u0447\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B? removeDisk=\u0423\u0434\u0430\u043B\u0438\u0442\u044C +removeDirectSystemPermissions=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 removeInterface=\u0423\u0434\u0430\u043B\u0438\u0442\u044C removePermission=\u0423\u0434\u0430\u043B\u0438\u0442\u044C removeProfile=\u0423\u0434\u0430\u043B\u0438\u0442\u044C diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserPermissionListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserPermissionListModel.java index 240722ea0cd..95994ff8719 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserPermissionListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserPermissionListModel.java @@ -29,6 +29,7 @@ public class UserPermissionListModel extends PermissionListModel { private UICommand addRoleToUserCommand; + private UICommand removeDirectRolesFromUserCommand; @Inject public UserPermissionListModel(Provider adElementListModelProvider) { @@ -39,6 +40,11 @@ public UserPermissionListModel(Provider adElementListModelPr setAddRoleToUserCommand(new UICommand("AddRoleToUser", this)); // $NON-NLS-1$ getCommands().add(getAddRoleToUserCommand()); + + setRemoveDirectRolesFromUserCommand(new UICommand("RemoveDirectRolesFromUser", this)); // $NON-NLS-1$ + getCommands().add(getRemoveDirectRolesFromUserCommand()); + getItemsChangedEvent().addListener((ev, sender, args) -> updateRemoveDirectPermissionActionAvailability()); + updateActionAvailability(); } @@ -86,6 +92,41 @@ private void setAddRoleToUserCommand(UICommand value) { addRoleToUserCommand = value; } + public UICommand getRemoveDirectRolesFromUserCommand() { + return removeDirectRolesFromUserCommand; + } + + public void setRemoveDirectRolesFromUserCommand(UICommand removeDirectRolesFromUserCommand) { + this.removeDirectRolesFromUserCommand = removeDirectRolesFromUserCommand; + } + + public void removeAllDirect() { + List elementsToRemove = getDirectPermissions(); + + // Correctly set permissions to delete into the selected items. + if (!elementsToRemove.isEmpty()) { + setSelectedItem(elementsToRemove.get(0)); + } + setSelectedItems(elementsToRemove); + + remove(); + } + + private List getDirectPermissions() { + List directPermissions = new ArrayList<>(); + if (getItems() == null || getItems().isEmpty()) { + return directPermissions; + } + for (Permission item : getItems()) { + if (item.getAdElementId() != null && + getEntity() != null && + item.getAdElementId().equals(getEntity().getId())) { + directPermissions.add(item); + } + } + return directPermissions; + } + public void remove() { if (getWindow() != null) { return; @@ -167,10 +208,18 @@ private void updateActionAvailability() { getAddCommand().setIsAvailable(false); } + private void updateRemoveDirectPermissionActionAvailability() { + getRemoveDirectRolesFromUserCommand() + .setIsExecutionAllowed(!getDirectPermissions().isEmpty()); + } + @Override public void executeCommand(UICommand command) { super.executeCommand(command); + if (command == getRemoveDirectRolesFromUserCommand()) { + removeAllDirect(); + } if (command == getRemoveCommand()) { remove(); } else if (command == getAddRoleToUserCommand()) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java index 20a2299aeb8..5edcd9ce7dc 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java @@ -137,7 +137,7 @@ public SearchableDetailModelProvider getConfirmModelPopup(UserPermissionListModel source, UICommand lastExecutedCommand) { - if (lastExecutedCommand == getModel().getRemoveCommand()) { + if (lastExecutedCommand == getModel().getRemoveCommand() || lastExecutedCommand == getModel().getRemoveDirectRolesFromUserCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserPermissionActionPanelPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserPermissionActionPanelPresenterWidget.java index 2b7c90ca488..b4ea302f63e 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserPermissionActionPanelPresenterWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserPermissionActionPanelPresenterWidget.java @@ -34,6 +34,12 @@ protected UICommand resolveCommand() { return getDetailModel().getAddRoleToUserCommand(); } }); + addActionButton(new UiCommandButtonDefinition(getSharedEventBus(), constants.removeDirectSystemPermissions()) { + @Override + protected UICommand resolveCommand() { + return getDetailModel().getRemoveDirectRolesFromUserCommand(); + } + }); super.initializeButtons(); } }