1 package org.onap.vid.services
3 import com.fasterxml.jackson.annotation.JsonIgnore
4 import org.onap.vid.category.CategoryParameterOptionRep
5 import org.onap.vid.category.CategoryParametersResponse
6 import org.onap.vid.model.CategoryParameter
7 import org.onap.vid.properties.Features
8 import org.onap.vid.roles.RoleProvider
9 import org.onap.vid.roles.WithPermissionPropertiesOwningEntity
10 import org.springframework.beans.factory.annotation.Qualifier
11 import org.springframework.stereotype.Service
12 import org.togglz.core.manager.FeatureManager
13 import javax.servlet.http.HttpServletRequest
16 @Qualifier("WithRoles")
17 class CategoryParameterServiceWithRoles(
18 private val categoryParameterService: CategoryParameterService,
19 private val featureManager: FeatureManager,
20 private val roleProvider: RoleProvider,
21 private val request: HttpServletRequest
22 ) : CategoryParameterService by categoryParameterService {
24 private val owningEntityKey = "owningEntity"
26 private fun shouldTreatPermissions() = featureManager.isActive(Features.FLAG_2006_LIMIT_OWNING_ENTITY_SELECTION_BY_ROLES)
28 override fun getCategoryParameters(familyName: CategoryParameter.Family?): CategoryParametersResponse {
29 val categoryParameters =
30 categoryParameterService.getCategoryParameters(familyName)
32 return if (shouldTreatPermissions()) {
33 treatPermissions(categoryParameters)
39 internal fun treatPermissions(categoryParametersResponse: CategoryParametersResponse): CategoryParametersResponse {
40 val extractedCategoryParameters = categoryParametersResponse.categoryParameters
41 val owningEntities = extractedCategoryParameters[owningEntityKey]
43 return CategoryParametersResponse(
44 extractedCategoryParameters + (owningEntityKey to removeNonPermitted(owningEntities)))
47 private fun removeNonPermitted(owningEntities: MutableList<CategoryParameterOptionRep>?): List<CategoryParameterOptionRep>? {
48 val userRolesValidator = roleProvider.getUserRolesValidator(request)
50 ?.map { OwningEntityOptionRep(it) }
51 ?.filter { userRolesValidator.isServicePermitted(it) }
55 * Encapsulates a CategoryParameterOptionRep where id field contains an owningEntityId
57 class OwningEntityOptionRep(option: CategoryParameterOptionRep) :
58 CategoryParameterOptionRep(option.id, option.name), WithPermissionPropertiesOwningEntity {
59 override val owningEntityId: String?
60 @JsonIgnore get() = id