From 8dfa832a4bbe276fdf898330325321a776ac253e Mon Sep 17 00:00:00 2001 From: ayalaben Date: Tue, 10 Apr 2018 13:43:01 +0300 Subject: User Permission items Change-Id: Ice1d126dd29e9f49ca90ada7b1671c72545c9ee8 Issue-ID: SDC-1202 Signed-off-by: ayalaben --- .../itempermissions/ItemPermissionsManager.java | 25 --- .../ItemPermissionsManagerFactory.java | 15 -- .../sdc/itempermissions/PermissionsManager.java | 42 +++++ .../itempermissions/PermissionsManagerFactory.java | 30 ++++ .../impl/ItemPermissionsManagerFactoryImpl.java | 41 ----- .../dao/impl/ItemPermissionsManagerImpl.java | 192 -------------------- .../dao/impl/PermissionsManagerFactoryImpl.java | 41 +++++ .../dao/impl/PermissionsManagerImpl.java | 197 +++++++++++++++++++++ .../src/main/resources/factoryConfiguration.json | 2 +- .../dao/impl/ItemPermissionsManagerImplTest.java | 145 --------------- .../dao/impl/PermissionsManagerImplTest.java | 154 ++++++++++++++++ 11 files changed, 465 insertions(+), 419 deletions(-) delete mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManager.java delete mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManagerFactory.java create mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManager.java create mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManagerFactory.java delete mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerFactoryImpl.java delete mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImpl.java create mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerFactoryImpl.java create mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImpl.java delete mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImplTest.java create mode 100644 openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImplTest.java (limited to 'openecomp-be/backend/openecomp-sdc-item-permissions-manager') diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManager.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManager.java deleted file mode 100644 index 1ca37325ca..0000000000 --- a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.openecomp.sdc.itempermissions; - -import org.openecomp.sdc.itempermissions.type.ItemPermissionsEntity; - -import java.util.Collection; -import java.util.Set; - -/** - * Created by ayalaben on 6/18/2017. - */ -public interface ItemPermissionsManager { - - Collection listItemPermissions(String itemId); - - void updateItemPermissions(String itemId, String permission, Set addedUsersIds, - Set removedUsersIds); - - boolean isAllowed(String itemId,String userId,String action); - - String getUserItemPermiission(String itemId, String userId); - - void deleteItemPermissions(String itemId); - - -} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManagerFactory.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManagerFactory.java deleted file mode 100644 index b983314b31..0000000000 --- a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/ItemPermissionsManagerFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.openecomp.sdc.itempermissions; - -import org.openecomp.core.factory.api.AbstractComponentFactory; -import org.openecomp.core.factory.api.AbstractFactory; - -/** - * Created by ayalaben on 6/18/2017. - */ -public abstract class ItemPermissionsManagerFactory extends - AbstractComponentFactory { - - public static ItemPermissionsManagerFactory getInstance() { - return AbstractFactory.getInstance(ItemPermissionsManagerFactory.class); - } -} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManager.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManager.java new file mode 100644 index 0000000000..09f6048f82 --- /dev/null +++ b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManager.java @@ -0,0 +1,42 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openecomp.sdc.itempermissions; + +import org.openecomp.sdc.itempermissions.type.ItemPermissionsEntity; + +import java.util.Collection; +import java.util.Set; + +/** + * Created by ayalaben on 6/18/2017. + */ +public interface PermissionsManager { + + Collection listItemPermissions(String itemId); + + Set listUserPermittedItems(String userId, String permission); + + void updateItemPermissions(String itemId, String permission, Set addedUsersIds, + Set removedUsersIds); + + boolean isAllowed(String itemId,String userId,String action); + + String getUserItemPermission(String itemId, String userId); + + void deleteItemPermissions(String itemId); + + +} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManagerFactory.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManagerFactory.java new file mode 100644 index 0000000000..0353e5ce03 --- /dev/null +++ b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/PermissionsManagerFactory.java @@ -0,0 +1,30 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openecomp.sdc.itempermissions; + +import org.openecomp.core.factory.api.AbstractComponentFactory; +import org.openecomp.core.factory.api.AbstractFactory; + +/** + * Created by ayalaben on 6/18/2017. + */ +public abstract class PermissionsManagerFactory extends + AbstractComponentFactory { + + public static PermissionsManagerFactory getInstance() { + return AbstractFactory.getInstance(PermissionsManagerFactory.class); + } +} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerFactoryImpl.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerFactoryImpl.java deleted file mode 100644 index 6e41465a11..0000000000 --- a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerFactoryImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2016-2018 European Support Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.openecomp.sdc.itempermissions.dao.impl; - -import org.openecomp.sdc.itempermissions.ItemPermissionsManager; -import org.openecomp.sdc.itempermissions.ItemPermissionsManagerFactory; -import org.openecomp.sdc.itempermissions.PermissionsServicesFactory; -import org.openecomp.sdc.notification.factories.NotificationPropagationManagerFactory; -import org.openecomp.sdc.notification.factories.SubscriptionServiceFactory; -import org.openecomp.sdc.versioning.AsdcItemManagerFactory; - -/** - * Created by ayalaben on 6/18/2017 - */ -public class ItemPermissionsManagerFactoryImpl extends ItemPermissionsManagerFactory { - - private static final ItemPermissionsManager INSTANCE = - new ItemPermissionsManagerImpl(PermissionsServicesFactory.getInstance().createInterface(), - AsdcItemManagerFactory.getInstance().createInterface(), - NotificationPropagationManagerFactory.getInstance().createInterface(), - SubscriptionServiceFactory.getInstance().createInterface()); - - @Override - public ItemPermissionsManager createInterface() { - return INSTANCE; - } -} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImpl.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImpl.java deleted file mode 100644 index a68c2d89f9..0000000000 --- a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImpl.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright © 2016-2018 European Support Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.openecomp.sdc.itempermissions.dao.impl; - -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.ITEM_ID_PROP; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.ITEM_NAME_PROP; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_CHANGED; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_GRANTED; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_ITEM; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import org.openecomp.sdc.common.errors.CoreException; -import org.openecomp.sdc.common.errors.ErrorCategory; -import org.openecomp.sdc.common.errors.ErrorCode; -import org.openecomp.sdc.common.errors.Messages; -import org.openecomp.sdc.common.session.SessionContextProviderFactory; -import org.openecomp.sdc.itempermissions.ItemPermissionsManager; -import org.openecomp.sdc.itempermissions.PermissionsServices; -import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes; -import org.openecomp.sdc.itempermissions.type.ItemPermissionsEntity; -import org.openecomp.sdc.logging.api.Logger; -import org.openecomp.sdc.logging.api.LoggerFactory; -import org.openecomp.sdc.notification.dtos.Event; -import org.openecomp.sdc.notification.services.NotificationPropagationManager; -import org.openecomp.sdc.notification.services.SubscriptionService; -import org.openecomp.sdc.versioning.AsdcItemManager; -import org.openecomp.sdc.versioning.types.Item; - -/** - * Created by ayalaben on 6/18/2017. - */ -public class ItemPermissionsManagerImpl implements ItemPermissionsManager { - - private static final Logger LOGGER = LoggerFactory.getLogger(ItemPermissionsManagerImpl.class); - private static final String CHANGE_PERMISSIONS = "Change_Item_Permissions"; - - private PermissionsServices permissionsServices; - private AsdcItemManager asdcItemManager; - private NotificationPropagationManager notifier; - private SubscriptionService subscriptionService; - - public ItemPermissionsManagerImpl(PermissionsServices permissionsServices, - AsdcItemManager asdcItemManager, - NotificationPropagationManager notificationPropagationManager, - SubscriptionService subscriptionService) { - this.permissionsServices = permissionsServices; - this.asdcItemManager = asdcItemManager; - this.notifier = notificationPropagationManager; - this.subscriptionService = subscriptionService; - } - - @Override - public Collection listItemPermissions(String itemId) { - - return permissionsServices.listItemPermissions(itemId); - } - - @Override - public void updateItemPermissions(String itemId, String permission, Set addedUsersIds, - Set removedUsersIds) { - - String currentUser = - SessionContextProviderFactory.getInstance().createInterface().get().getUser().getUserId(); - - if (!permissionsServices.isAllowed(itemId, currentUser, CHANGE_PERMISSIONS)) { - throw new CoreException(new ErrorCode.ErrorCodeBuilder() - .withMessage(Messages.PERMISSIONS_ERROR.getErrorMessage()) - .withId(Messages.PERMISSIONS_ERROR.getErrorMessage()) - .withCategory(ErrorCategory.SECURITY).build()); - } - - if (permission.equals(PermissionTypes.Owner.name()) ){ - if (addedUsersIds.size() == 1){ - asdcItemManager.updateOwner(itemId,addedUsersIds.iterator().next()); - } else { - throw new CoreException(new ErrorCode.ErrorCodeBuilder() - .withMessage(Messages.PERMISSIONS_OWNER_ERROR.getErrorMessage()) - .withId(Messages.PERMISSIONS_OWNER_ERROR.getErrorMessage()) - .withCategory(ErrorCategory.SECURITY).build()); - } - } - - permissionsServices - .updateItemPermissions(itemId, permission, addedUsersIds, removedUsersIds); - - sendNotifications(itemId, permission, addedUsersIds, removedUsersIds, currentUser); - } - - private void sendNotifications(String itemId, String permission, Set addedUsersIds, - Set removedUsersIds, String userName) { - - Item item = asdcItemManager.get(itemId); - addedUsersIds.forEach(affectedUser -> { - notifyUser(userName, true, item.getName(), itemId, affectedUser, permission); - subscriptionService.subscribe(affectedUser, itemId); - }); - removedUsersIds.forEach(affectedUser -> { - notifyUser(userName, false, item.getName(), itemId, affectedUser, permission); - subscriptionService.unsubscribe(affectedUser, itemId); - }); - - } - - private void notifyUser(String userName, boolean granted, String itemName, String itemId, - String affectedUser, String permission) { - Map details = new HashMap<>(); - details.put(PERMISSION_ITEM, permission); - details.put(ITEM_ID_PROP, itemId); - details.put(ITEM_NAME_PROP, itemName); - details.put(PERMISSION_GRANTED, granted); - details.put(PERMISSION_USER, userName); - PermissionEvent permissionEvent = new PermissionEvent(PERMISSION_CHANGED, affectedUser, - details, affectedUser); - - try { - notifier.directNotification(permissionEvent, affectedUser); - } catch (Exception e) { - LOGGER.error("Failed to send notification on permission changed for user '" + - affectedUser + "'"); - } - - } - - @Override - public boolean isAllowed(String itemId, String userId, String action) { - return permissionsServices.isAllowed(itemId, userId, action); - } - - @Override - public String getUserItemPermiission(String itemId, String userId) { - return permissionsServices.getUserItemPermiission(itemId, userId); - } - - @Override - public void deleteItemPermissions(String itemId) { - permissionsServices.deleteItemPermissions(itemId); - } - - private class PermissionEvent implements Event { - - private String eventType; - private String originatorId; - private Map attributes; - private String entityId; - - private PermissionEvent(String eventType, String originatorId, - Map attributes, String entityId) { - this.eventType = eventType; - this.originatorId = originatorId; - this.attributes = attributes; - this.entityId = entityId; - } - - @Override - public String getEventType() { - return eventType; - } - - @Override - public String getOriginatorId() { - return originatorId; - } - - @Override - public Map getAttributes() { - return attributes; - } - - @Override - public String getEntityId() { - return entityId; - } - } -} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerFactoryImpl.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerFactoryImpl.java new file mode 100644 index 0000000000..14539b0fa1 --- /dev/null +++ b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerFactoryImpl.java @@ -0,0 +1,41 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openecomp.sdc.itempermissions.dao.impl; + +import org.openecomp.sdc.itempermissions.PermissionsManager; +import org.openecomp.sdc.itempermissions.PermissionsManagerFactory; +import org.openecomp.sdc.itempermissions.PermissionsServicesFactory; +import org.openecomp.sdc.notification.factories.NotificationPropagationManagerFactory; +import org.openecomp.sdc.notification.factories.SubscriptionServiceFactory; +import org.openecomp.sdc.versioning.AsdcItemManagerFactory; + +/** + * Created by ayalaben on 6/18/2017 + */ +public class PermissionsManagerFactoryImpl extends PermissionsManagerFactory { + + private static final PermissionsManager INSTANCE = + new PermissionsManagerImpl(PermissionsServicesFactory.getInstance().createInterface(), + AsdcItemManagerFactory.getInstance().createInterface(), + NotificationPropagationManagerFactory.getInstance().createInterface(), + SubscriptionServiceFactory.getInstance().createInterface()); + + @Override + public PermissionsManager createInterface() { + return INSTANCE; + } +} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImpl.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImpl.java new file mode 100644 index 0000000000..741053017c --- /dev/null +++ b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImpl.java @@ -0,0 +1,197 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openecomp.sdc.itempermissions.dao.impl; + +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.ITEM_ID_PROP; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.ITEM_NAME_PROP; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_CHANGED; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_GRANTED; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_ITEM; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import org.openecomp.sdc.common.errors.CoreException; +import org.openecomp.sdc.common.errors.ErrorCategory; +import org.openecomp.sdc.common.errors.ErrorCode; +import org.openecomp.sdc.common.errors.Messages; +import org.openecomp.sdc.common.session.SessionContextProviderFactory; +import org.openecomp.sdc.itempermissions.PermissionsManager; +import org.openecomp.sdc.itempermissions.PermissionsServices; +import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes; +import org.openecomp.sdc.itempermissions.type.ItemPermissionsEntity; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; +import org.openecomp.sdc.notification.dtos.Event; +import org.openecomp.sdc.notification.services.NotificationPropagationManager; +import org.openecomp.sdc.notification.services.SubscriptionService; +import org.openecomp.sdc.versioning.AsdcItemManager; +import org.openecomp.sdc.versioning.types.Item; + +/** + * Created by ayalaben on 6/18/2017. + */ +public class PermissionsManagerImpl implements PermissionsManager { + + private static final Logger LOGGER = LoggerFactory.getLogger(PermissionsManagerImpl.class); + private static final String CHANGE_PERMISSIONS = "Change_Item_Permissions"; + + private PermissionsServices permissionsServices; + private AsdcItemManager asdcItemManager; + private NotificationPropagationManager notifier; + private SubscriptionService subscriptionService; + + public PermissionsManagerImpl(PermissionsServices permissionsServices, + AsdcItemManager asdcItemManager, + NotificationPropagationManager notificationPropagationManager, + SubscriptionService subscriptionService) { + this.permissionsServices = permissionsServices; + this.asdcItemManager = asdcItemManager; + this.notifier = notificationPropagationManager; + this.subscriptionService = subscriptionService; + } + + @Override + public Collection listItemPermissions(String itemId) { + + return permissionsServices.listItemPermissions(itemId); + } + + @Override + public Set listUserPermittedItems(String userId, String permission) { + return permissionsServices.listUserPermittedItems(userId,permission); + } + + @Override + public void updateItemPermissions(String itemId, String permission, Set addedUsersIds, + Set removedUsersIds) { + + String currentUser = + SessionContextProviderFactory.getInstance().createInterface().get().getUser().getUserId(); + + if (!permissionsServices.isAllowed(itemId, currentUser, CHANGE_PERMISSIONS)) { + throw new CoreException(new ErrorCode.ErrorCodeBuilder() + .withMessage(Messages.PERMISSIONS_ERROR.getErrorMessage()) + .withId(Messages.PERMISSIONS_ERROR.getErrorMessage()) + .withCategory(ErrorCategory.SECURITY).build()); + } + + if (permission.equals(PermissionTypes.Owner.name()) ){ + if (addedUsersIds.size() == 1){ + asdcItemManager.updateOwner(itemId,addedUsersIds.iterator().next()); + } else { + throw new CoreException(new ErrorCode.ErrorCodeBuilder() + .withMessage(Messages.PERMISSIONS_OWNER_ERROR.getErrorMessage()) + .withId(Messages.PERMISSIONS_OWNER_ERROR.getErrorMessage()) + .withCategory(ErrorCategory.SECURITY).build()); + } + } + + permissionsServices + .updateItemPermissions(itemId, permission, addedUsersIds, removedUsersIds); + + sendNotifications(itemId, permission, addedUsersIds, removedUsersIds, currentUser); + } + + private void sendNotifications(String itemId, String permission, Set addedUsersIds, + Set removedUsersIds, String userName) { + + Item item = asdcItemManager.get(itemId); + addedUsersIds.forEach(affectedUser -> { + notifyUser(userName, true, item.getName(), itemId, affectedUser, permission); + subscriptionService.subscribe(affectedUser, itemId); + }); + removedUsersIds.forEach(affectedUser -> { + notifyUser(userName, false, item.getName(), itemId, affectedUser, permission); + subscriptionService.unsubscribe(affectedUser, itemId); + }); + + } + + private void notifyUser(String userName, boolean granted, String itemName, String itemId, + String affectedUser, String permission) { + Map details = new HashMap<>(); + details.put(PERMISSION_ITEM, permission); + details.put(ITEM_ID_PROP, itemId); + details.put(ITEM_NAME_PROP, itemName); + details.put(PERMISSION_GRANTED, granted); + details.put(PERMISSION_USER, userName); + PermissionEvent permissionEvent = new PermissionEvent(PERMISSION_CHANGED, affectedUser, + details, affectedUser); + + try { + notifier.directNotification(permissionEvent, affectedUser); + } catch (Exception e) { + LOGGER.error("Failed to send notification on permission changed for user '" + + affectedUser + "'"); + } + + } + + @Override + public boolean isAllowed(String itemId, String userId, String action) { + return permissionsServices.isAllowed(itemId, userId, action); + } + + @Override + public String getUserItemPermission(String itemId, String userId) { + return permissionsServices.getUserItemPermiission(itemId, userId); + } + + @Override + public void deleteItemPermissions(String itemId) { + permissionsServices.deleteItemPermissions(itemId); + } + + private class PermissionEvent implements Event { + + private String eventType; + private String originatorId; + private Map attributes; + private String entityId; + + private PermissionEvent(String eventType, String originatorId, + Map attributes, String entityId) { + this.eventType = eventType; + this.originatorId = originatorId; + this.attributes = attributes; + this.entityId = entityId; + } + + @Override + public String getEventType() { + return eventType; + } + + @Override + public String getOriginatorId() { + return originatorId; + } + + @Override + public Map getAttributes() { + return attributes; + } + + @Override + public String getEntityId() { + return entityId; + } + } +} diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/resources/factoryConfiguration.json b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/resources/factoryConfiguration.json index a98f9c07f9..1ac763d3de 100644 --- a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/resources/factoryConfiguration.json +++ b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/main/resources/factoryConfiguration.json @@ -1,3 +1,3 @@ { - "org.openecomp.sdc.itempermissions.ItemPermissionsManagerFactory": "org.openecomp.sdc.itempermissions.dao.impl.ItemPermissionsManagerFactoryImpl" + "org.openecomp.sdc.itempermissions.PermissionsManagerFactory": "org.openecomp.sdc.itempermissions.dao.impl.PermissionsManagerFactoryImpl" } \ No newline at end of file diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImplTest.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImplTest.java deleted file mode 100644 index e215db2335..0000000000 --- a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImplTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright © 2016-2018 European Support Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.openecomp.sdc.itempermissions.dao.impl; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.verify; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.ITEM_ID_PROP; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_CHANGED; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_GRANTED; -import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_ITEM; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertTrue; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Matchers; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.openecomp.sdc.common.errors.CoreException; -import org.openecomp.sdc.common.session.SessionContextProviderFactory; -import org.openecomp.sdc.itempermissions.PermissionsServices; -import org.openecomp.sdc.notification.dtos.Event; -import org.openecomp.sdc.notification.services.NotificationPropagationManager; -import org.openecomp.sdc.notification.services.SubscriptionService; -import org.openecomp.sdc.versioning.AsdcItemManager; -import org.openecomp.sdc.versioning.types.Item; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * Created by ayalaben on 7/6/2017 - */ -public class ItemPermissionsManagerImplTest { - - private static final String ITEM1_ID = "1"; - private static final String PERMISSION = "Contributor"; - private static final String ACTION = "Change_Item_Permissions"; - private static final String USER = "user"; - private static final String AFFECTED_USER1 = "affected_user1"; - private static final String AFFECTED_USER2 = "affected_user2"; - private static final String AFFECTED_USER3 = "affected_user3"; - private static final String tenant = "dox"; - - @Mock - private PermissionsServices permissionsServicesMock; - @Mock - private AsdcItemManager asdcItemManagerMock; - @Mock - private SubscriptionService subscriptionServiceMock; - @Mock - private NotificationPropagationManager notifierMock; - @Captor - private ArgumentCaptor eventArgumentCaptor; - - @InjectMocks - private ItemPermissionsManagerImpl permissionsManager; - - - @BeforeMethod - public void setUp() throws Exception { - SessionContextProviderFactory.getInstance().createInterface().create(USER, - tenant); - MockitoAnnotations.initMocks(this); - } - - @Test(expectedExceptions = CoreException.class, expectedExceptionsMessageRegExp = "Permissions " + - "Error. The user does not have permission to perform this action.") - public void testUpdateItemPermissionsWhenNotAllowed() { - doReturn(false).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION); - - permissionsManager - .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1), - new HashSet<>()); - } - - @Test - public void testUpdateItemPermissions() { - doReturn(true).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION); - Item item = new Item(); - item.setName("Item 1 Name"); - doReturn(item).when(asdcItemManagerMock).get(ITEM1_ID); - - Set addedUsersIds = - Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet()); - Set removedUsersIds = Collections.singleton(AFFECTED_USER3); - permissionsManager - .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds); - - verify(permissionsServicesMock) - .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds); - - for (String addedUsersId : addedUsersIds) { - verifyCallsToNotificationsFramework(addedUsersId, true); - } - for (String removedUsersId : removedUsersIds) { - verifyCallsToNotificationsFramework(removedUsersId, false); - } - } - - private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) { - verifyCallToSubscriptionService(affectedUser, permissionGranted); - verifyDirectNotificationCallParameters(affectedUser, permissionGranted); - } - - private void verifyDirectNotificationCallParameters(String affectedUser, boolean permissionGranted) { - verify(notifierMock).directNotification(eventArgumentCaptor.capture(), Matchers.eq(affectedUser)); - Event event = eventArgumentCaptor.getValue(); - assertTrue(event.getEventType().equals(PERMISSION_CHANGED)); - Map attributes = event.getAttributes(); - assertEquals(attributes.get(PERMISSION_GRANTED), permissionGranted); - assertEquals(attributes.get(ITEM_ID_PROP), ITEM1_ID); - assertEquals(attributes.get(PERMISSION_ITEM), PERMISSION); - } - - private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) { - if (permissionGranted) { - verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID); - } else { - verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID); - } - } - - -} \ No newline at end of file diff --git a/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImplTest.java b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImplTest.java new file mode 100644 index 0000000000..83902c5f53 --- /dev/null +++ b/openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/PermissionsManagerImplTest.java @@ -0,0 +1,154 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openecomp.sdc.itempermissions.dao.impl; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.verify; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.ITEM_ID_PROP; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_CHANGED; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_GRANTED; +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_ITEM; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.openecomp.sdc.common.errors.CoreException; +import org.openecomp.sdc.common.session.SessionContextProviderFactory; +import org.openecomp.sdc.itempermissions.PermissionsServices; +import org.openecomp.sdc.notification.dtos.Event; +import org.openecomp.sdc.notification.services.NotificationPropagationManager; +import org.openecomp.sdc.notification.services.SubscriptionService; +import org.openecomp.sdc.versioning.AsdcItemManager; +import org.openecomp.sdc.versioning.types.Item; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +/** + * Created by ayalaben on 7/6/2017 + */ +public class PermissionsManagerImplTest { + + private static final String ITEM1_ID = "1"; + private static final String PERMISSION = "Contributor"; + private static final String ACTION = "Change_Item_Permissions"; + private static final String USER = "user"; + private static final String AFFECTED_USER1 = "affected_user1"; + private static final String AFFECTED_USER2 = "affected_user2"; + private static final String AFFECTED_USER3 = "affected_user3"; + private static final String tenant = "dox"; + + @Mock + private PermissionsServices permissionsServicesMock; + @Mock + private AsdcItemManager asdcItemManagerMock; + @Mock + private SubscriptionService subscriptionServiceMock; + @Mock + private NotificationPropagationManager notifierMock; + @Captor + private ArgumentCaptor eventArgumentCaptor; + + @InjectMocks + private PermissionsManagerImpl permissionsManager; + + + @BeforeMethod + public void setUp() throws Exception { + SessionContextProviderFactory.getInstance().createInterface().create(USER, + tenant); + MockitoAnnotations.initMocks(this); + } + + @Test(expectedExceptions = CoreException.class, expectedExceptionsMessageRegExp = "Permissions " + + "Error. The user does not have permission to perform this action.") + public void testUpdateItemPermissionsWhenNotAllowed() { + doReturn(false).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION); + + permissionsManager + .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1), + new HashSet<>()); + } + + @Test + public void testUpdateItemPermissions() { + doReturn(true).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION); + Item item = new Item(); + item.setName("Item 1 Name"); + doReturn(item).when(asdcItemManagerMock).get(ITEM1_ID); + + Set addedUsersIds = + Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet()); + Set removedUsersIds = Collections.singleton(AFFECTED_USER3); + permissionsManager + .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds); + + verify(permissionsServicesMock) + .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds); + + for (String addedUsersId : addedUsersIds) { + verifyCallsToNotificationsFramework(addedUsersId, true); + } + for (String removedUsersId : removedUsersIds) { + verifyCallsToNotificationsFramework(removedUsersId, false); + } + } + + @Test + public void testListUserPermittedItems(){ + permissionsManager.listUserPermittedItems(AFFECTED_USER1,PERMISSION); + + verify(permissionsServicesMock) + .listUserPermittedItems(AFFECTED_USER1, PERMISSION); + + } + + private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) { + verifyCallToSubscriptionService(affectedUser, permissionGranted); + verifyDirectNotificationCallParameters(affectedUser, permissionGranted); + } + + private void verifyDirectNotificationCallParameters(String affectedUser, boolean permissionGranted) { + verify(notifierMock).directNotification(eventArgumentCaptor.capture(), Matchers.eq(affectedUser)); + Event event = eventArgumentCaptor.getValue(); + assertTrue(event.getEventType().equals(PERMISSION_CHANGED)); + Map attributes = event.getAttributes(); + assertEquals(attributes.get(PERMISSION_GRANTED), permissionGranted); + assertEquals(attributes.get(ITEM_ID_PROP), ITEM1_ID); + assertEquals(attributes.get(PERMISSION_ITEM), PERMISSION); + } + + private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) { + if (permissionGranted) { + verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID); + } else { + verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID); + } + } + + +} \ No newline at end of file -- cgit 1.2.3-korg