Hello Yair Zaslavsky, I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/25482 to review the following change. Change subject: engine: Can't add user without system level admin permission ...................................................................... engine: Can't add user without system level admin permission This patch fixes a regression introduced at Ib62e1c051bc78b8a9ec0f32e6ba4eb9484242591 1. Introducing a new permission of adding non existing users - this is required, as the other options are: a. Using the existing "manipulate users" permission - this will cause a regression, allowing roles to add users directly without the need to use the add permissions dialogs. b. Removing the permission check for non existing users/groups - this will break https://bugzilla.redhat.com/923100 2. The new permission is added to all the roles that have manipulate permissions manipulation - this is done in order to fix the above regression. Change-Id: I308f9cc5edb53b9633d768fd3d382dc9cf62031c Bug-Url: https://bugzilla.redhat.com/1070651 Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com> Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/roles_ui/RoleTreeView.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java M frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties A packaging/dbscripts/upgrade/03_04_0650_add_missing_manipulate_users_permissions.sql 9 files changed, 44 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/82/25482/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java index f330c8f..eb40b6a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddPermissionCommand.java @@ -10,6 +10,7 @@ import org.ovirt.engine.core.common.action.PermissionsOperationsParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.DbGroup; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.businessentities.Permissions; @@ -192,10 +193,10 @@ // if the user does not exist in the database we need to // check if the logged in user has permissions to add another // user from the directory service - if (getParameters().getUser() != null && dbUser == null) { - permissionsSubject.add(new PermissionSubject(MultiLevelAdministrationHandler.SYSTEM_OBJECT_ID, - VdcObjectType.System, - VdcActionType.AddUser.getActionGroup())); + if ((getParameters().getUser() != null && dbUser == null) + || (getParameters().getGroup() != null && dbGroup == null)) { + permissionsSubject.add(new PermissionSubject(permission.getObjectId(), + permission.getObjectType(), ActionGroup.ADD_USERS_AND_GROUPS_FROM_DIRECTORY)); } return permissionsSubject; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java index 484a593..6c13df1 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java @@ -71,6 +71,7 @@ MANIPULATE_USERS(500, RoleType.ADMIN, VdcObjectType.User, true), MANIPULATE_ROLES(501, RoleType.ADMIN, VdcObjectType.User, true), MANIPULATE_PERMISSIONS(502, RoleType.USER, VdcObjectType.User, true), + ADD_USERS_AND_GROUPS_FROM_DIRECTORY(503, RoleType.USER, VdcObjectType.User, true), // storage domains actions groups CREATE_STORAGE_DOMAIN(600, RoleType.ADMIN, VdcObjectType.Storage, true, ApplicationMode.VirtOnly), EDIT_STORAGE_DOMAIN_CONFIGURATION(601, RoleType.ADMIN, VdcObjectType.Storage, true, ApplicationMode.VirtOnly), diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java index 629700b..67f6b88 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java @@ -60,6 +60,8 @@ MANIPULATE_USERS, MANIPULATE_ROLES, MANIPULATE_PERMISSIONS, + ADD_USERS_AND_GROUPS_FROM_DIRECTORY, + // storage domains actions groups CREATE_STORAGE_DOMAIN, EDIT_STORAGE_DOMAIN_CONFIGURATION, diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java index e5ddfde..8edd1b5 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java @@ -188,6 +188,8 @@ return PermitType.EVENT_NOTIFICATION_MANAGEMENT; case MANIPULATE_AFFINITY_GROUPS: return PermitType.MANIPULATE_AFFINITY_GROUPS; + case ADD_USERS_AND_GROUPS_FROM_DIRECTORY: + return PermitType.ADD_USERS_AND_GROUPS_FROM_DIRECTORY; default: return null; } @@ -340,6 +342,8 @@ return ActionGroup.EVENT_NOTIFICATION_MANAGEMENT; case MANIPULATE_AFFINITY_GROUPS: return ActionGroup.MANIPULATE_AFFINITY_GROUPS; + case ADD_USERS_AND_GROUPS_FROM_DIRECTORY: + return ActionGroup.ADD_USERS_AND_GROUPS_FROM_DIRECTORY; default: return null; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/roles_ui/RoleTreeView.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/roles_ui/RoleTreeView.java index 76c3482..d9c2481 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/roles_ui/RoleTreeView.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/roles_ui/RoleTreeView.java @@ -286,6 +286,8 @@ getConstants().allowToAddRemoveUsersFromTheSystemRoleTreeTooltip()), new RoleNode(ActionGroup.MANIPULATE_PERMISSIONS, getConstants().allowToAddRemovePermissionsForUsersOnObjectsInTheSystemRoleTreeTooltip()), + new RoleNode(ActionGroup.ADD_USERS_AND_GROUPS_FROM_DIRECTORY, + getConstants().allowToAddUsersAndGroupsFromDirectoryOnObjectsInTheSystemRoleTreeTooltip()), new RoleNode(ActionGroup.MANIPULATE_ROLES, getConstants().allowToDefineConfigureRolesInTheSystemRoleTreeTooltip()), new RoleNode(ActionGroup.LOGIN, getConstants().allowToLoginToTheSystemRoleTreeTooltip()), diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java index 151d996..ae6567b 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java @@ -144,6 +144,8 @@ String ActionGroup___MANIPULATE_PERMISSIONS(); + String ActionGroup___ADD_USERS_AND_GROUPS_FROM_DIRECTORY(); + String ActionGroup___LOGIN(); String ActionGroup___TAG_MANAGEMENT(); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index bc04564..6f9c629 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -1080,6 +1080,9 @@ @DefaultStringValue("Allow to add/remove permissions for Users on objects in the system") String allowToAddRemovePermissionsForUsersOnObjectsInTheSystemRoleTreeTooltip(); + @DefaultStringValue("Add users and groups from directory while adding permissions") + String allowToAddUsersAndGroupsFromDirectoryOnObjectsInTheSystemRoleTreeTooltip(); + @DefaultStringValue("Allow to login to the system") String allowToLoginToTheSystemRoleTreeTooltip(); diff --git a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties index 2f1d615..dc0eefa 100644 --- a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties +++ b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties @@ -68,6 +68,7 @@ ActionGroup___VM_POOL_BASIC_OPERATIONS=Basic Operations ActionGroup___MANIPULATE_USERS=Manipulate Users ActionGroup___MANIPULATE_PERMISSIONS=Manipulate Permissions +ActionGroup___ADD_USERS_AND_GROUPS_FROM_DIRECTORY=Add users and groups from directory while adding permissions ActionGroup___LOGIN=Login Permissions ActionGroup___TAG_MANAGEMENT=Tag management Permissions ActionGroup___BOOKMARK_MANAGEMENT=Bookmark management Permissions diff --git a/packaging/dbscripts/upgrade/03_04_0650_add_missing_manipulate_users_permissions.sql b/packaging/dbscripts/upgrade/03_04_0650_add_missing_manipulate_users_permissions.sql new file mode 100644 index 0000000..865da42 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_04_0650_add_missing_manipulate_users_permissions.sql @@ -0,0 +1,24 @@ +Create or replace FUNCTION _temp_add_missing_manipulate_users_permissions() +RETURNS VOID + AS $procedure$ + DECLARE + v_ADD_USERS_AND_GROUPS_FROM_DIRECTORY INTEGER; + v_MANIPULATE_PERMISSIONS INTEGER; +BEGIN + v_ADD_USERS_AND_GROUPS_FROM_DIRECTORY = 503; + v_MANIPULATE_PERMISSIONS = 502; + INSERT INTO ROLES_GROUPS(role_id,action_group_id) + SELECT rg.role_id, v_ADD_USERS_AND_GROUPS_FROM_DIRECTORY + FROM ROLES_GROUPS rg + WHERE + action_group_id = v_MANIPULATE_PERMISSIONS + AND NOT EXISTS (SELECT 1 + FROM ROLES_GROUPS rg2 + WHERE rg2.role_id = rg.role_id + AND action_group_id = v_ADD_USERS_AND_GROUPS_FROM_DIRECTORY); + RETURN; +END; $procedure$ +LANGUAGE plpgsql; + +SELECT _temp_add_missing_manipulate_users_permissions(); +drop function _temp_add_missing_manipulate_users_permissions(); -- To view, visit http://gerrit.ovirt.org/25482 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I308f9cc5edb53b9633d768fd3d382dc9cf62031c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Ravi Nori <rn...@redhat.com> Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches