This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch feature/projects
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/feature/projects by this push:
     new 8f60582  DLAB-654 added possibility to define project for analytical 
tool
8f60582 is described below

commit 8f60582f1177e8492705d911eceb51d158d281cc
Author: bhliva <[email protected]>
AuthorDate: Tue May 28 11:54:29 2019 +0300

    DLAB-654 added possibility to define project for analytical tool
---
 .../java/com/epam/dlab/dto/UserInstanceDTO.java    |  7 +++
 .../dlab/dto/exploratory/ExploratoryBaseDTO.java   | 71 +++++++++++++---------
 .../src/main/java/com/epam/dlab/auth/UserInfo.java |  6 +-
 services/self-service/self-service.yml             | 11 +++-
 .../auth/SelfServiceSecurityAuthorizer.java        |  2 +-
 .../dlab/backendapi/dao/aws/AwsBillingDAO.java     |  2 +-
 .../dlab/backendapi/dao/azure/AzureBillingDAO.java |  2 +-
 .../epam/dlab/backendapi/domain/ProjectDTO.java    |  2 +-
 .../backendapi/resources/ExploratoryResource.java  |  4 +-
 .../resources/InfrastructureTemplateResource.java  | 19 +++---
 .../resources/aws/ComputationalResourceAws.java    | 14 +++--
 .../azure/ComputationalResourceAzure.java          | 12 ++--
 .../resources/dto/ComputationalCreateFormDTO.java  |  4 ++
 .../resources/dto/ExploratoryCreateFormDTO.java    | 12 ++++
 .../resources/gcp/ComputationalResourceGcp.java    | 16 ++---
 .../com/epam/dlab/backendapi/roles/UserRoles.java  | 25 +++++---
 .../service/InfrastructureTemplateService.java     |  4 +-
 .../service/impl/ExploratoryServiceImpl.java       |  7 ++-
 .../impl/InfrastructureTemplateServiceBase.java    | 35 ++++++++---
 .../resources/ExploratoryResourceTest.java         |  5 +-
 .../InfrastructureTemplateResourceTest.java        | 36 +++++------
 .../epam/dlab/backendapi/roles/UserRolesTest.java  | 16 ++---
 .../InfrastructureTemplateServiceBaseTest.java     | 27 +++++---
 23 files changed, 212 insertions(+), 127 deletions(-)

diff --git 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
index a4a3e47..8cbfadb 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
@@ -51,6 +51,8 @@ public class UserInstanceDTO {
        private String imageName;
        @JsonProperty("version")
        private String imageVersion;
+       @JsonProperty("version")
+       private String project;
        @JsonProperty("template_name")
        private String templateName;
        @JsonProperty
@@ -145,6 +147,11 @@ public class UserInstanceDTO {
                return this;
        }
 
+       public UserInstanceDTO withProject(String project) {
+               setProject(project);
+               return this;
+       }
+
        /**
         * Sets a list of user's computational resources for notebook.
         */
diff --git 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
index fe97f95..1c68c75 100644
--- 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
+++ 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
@@ -24,32 +24,47 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.MoreObjects.ToStringHelper;
 
 public class ExploratoryBaseDTO<T extends ExploratoryBaseDTO<?>> extends 
ResourceEnvBaseDTO<T> {
-    @SuppressWarnings("unchecked")
-    private final T self = (T) this;
-    @JsonProperty("notebook_image")
-    private String notebookImage;
-
-    public String getNotebookImage() {
-        return notebookImage;
-    }
-
-    public void setNotebookImage(String notebookImage) {
-        this.notebookImage = notebookImage;
-    }
-
-    public T withNotebookImage(String notebookImage) {
-        setNotebookImage(notebookImage);
-        return self;
-    }
-
-    @Override
-    public ToStringHelper toStringHelper(Object self) {
-        return super.toStringHelper(self)
-                .add("notebookImage", notebookImage);
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this).toString();
-    }
+       @SuppressWarnings("unchecked")
+       private final T self = (T) this;
+       @JsonProperty("notebook_image")
+       private String notebookImage;
+       @JsonProperty("project")
+       private String project;
+
+       public String getNotebookImage() {
+               return notebookImage;
+       }
+
+       public void setNotebookImage(String notebookImage) {
+               this.notebookImage = notebookImage;
+       }
+
+       public T withNotebookImage(String notebookImage) {
+               setNotebookImage(notebookImage);
+               return self;
+       }
+
+       public T withProject(String project) {
+               setProject(project);
+               return self;
+       }
+
+       @Override
+       public ToStringHelper toStringHelper(Object self) {
+               return super.toStringHelper(self)
+                               .add("notebookImage", notebookImage);
+       }
+
+       public String getProject() {
+               return project;
+       }
+
+       public void setProject(String project) {
+               this.project = project;
+       }
+
+       @Override
+       public String toString() {
+               return toStringHelper(this).toString();
+       }
 }
diff --git 
a/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java 
b/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
index 8668a91..b0c05bf 100644
--- a/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
+++ b/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
@@ -67,7 +67,7 @@ public class UserInfo implements Principal {
     }
 
     @JsonProperty("roles")
-    public Collection<String> getRoles() {
+    public Set<String> getRoles() {
         return roles;
     }
 
@@ -121,6 +121,8 @@ public class UserInfo implements Principal {
         return newInfo;
     }
 
+
+
     public boolean isAwsUser() {
         return awsUser;
     }
@@ -161,6 +163,8 @@ public class UserInfo implements Principal {
 
     }
 
+
+
     @Override
     public int hashCode() {
         return Objects.hash(username,
diff --git a/services/self-service/self-service.yml 
b/services/self-service/self-service.yml
index 855950d..0f2dcc1 100644
--- a/services/self-service/self-service.yml
+++ b/services/self-service/self-service.yml
@@ -81,7 +81,7 @@ server:
   - type: https
     port: 8443
     certAlias: dlab
-    validateCerts: true
+    validateCerts: false
     keyStorePath: ${KEY_STORE_PATH}
     keyStorePassword: ${KEY_STORE_PASSWORD}
     trustStorePath: ${TRUST_STORE_PATH}
@@ -92,7 +92,7 @@ server:
   - type: https
     port: 8444
     certAlias: dlab
-    validateCerts: true
+    validateCerts: false
     keyStorePath: ${KEY_STORE_PATH}
     keyStorePassword: ${KEY_STORE_PASSWORD}
     trustStorePath: ${TRUST_STORE_PATH}
@@ -105,6 +105,7 @@ logging:
   loggers:
     com.epam: TRACE
     com.novemberain: ERROR
+    io.swagger.v3: DEBUG
   appenders:
 <#if DEV_MODE == "true">
   - type: console
@@ -157,8 +158,12 @@ schedulers:
     enabled: true
     cron: "0 0 * ? * * *"
   checkUserQuoteScheduler:
-    enabled: true
+    enabled: false
     cron: "0 0 * ? * * *"
+  checkProjectQuoteScheduler:
+    enabled: true
+    cron: "0 * * ? * * *"
+
 
 guacamole:
   connectionProtocol: ssh
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
index 9b348e9..2d93b74 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
@@ -29,6 +29,6 @@ import io.dropwizard.auth.Authorizer;
 public class SelfServiceSecurityAuthorizer implements Authorizer<UserInfo> {
        @Override
        public boolean authorize(UserInfo principal, String role) {
-               return UserRoles.checkAccess(principal, RoleType.PAGE, role);
+               return UserRoles.checkAccess(principal, RoleType.PAGE, role, 
principal.getRoles());
        }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
index 43f4a9c..c5e0c92 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
@@ -84,7 +84,7 @@ public class AwsBillingDAO extends 
BaseBillingDAO<AwsBillingFilter> {
     public Document getReport(UserInfo userInfo, AwsBillingFilter filter) {
         // Create filter
         List<Bson> conditions = new ArrayList<>();
-        boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, 
"/api/infrastructure_provision/billing");
+        boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, 
"/api/infrastructure_provision/billing", userInfo.getRoles());
         setUserFilter(userInfo, filter, isFullReport);
         addCondition(conditions, USER, filter.getUser());
         addCondition(conditions, FIELD_PRODUCT, filter.getProduct());
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
index 5b4db2a..42bccbc 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
@@ -57,7 +57,7 @@ public class AzureBillingDAO extends 
BaseBillingDAO<AzureBillingFilter> {
 
     public Document getReport(UserInfo userInfo, AzureBillingFilter filter) {
 
-        boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, 
"/api/infrastructure_provision/billing");
+        boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, 
"/api/infrastructure_provision/billing", userInfo.getRoles());
         setUserFilter(userInfo, filter, isFullReport);
 
         List<Bson> matchCriteria = matchCriteria(filter);
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
index 2eb6a05..1b60b59 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
@@ -12,7 +12,7 @@ public class ProjectDTO {
        @NotNull
        private final String name;
        @NotNull
-       private final Set<String>endpoints;
+       private final Set<String> endpoints;
        @NotNull
        private final Set<String> groups;
        private final Integer budget;
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
index 6e951c6..be7ad6a 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
@@ -79,11 +79,11 @@ public class ExploratoryResource implements ExploratoryAPI {
                                                   @Valid @NotNull 
ExploratoryCreateFormDTO formDTO) {
                log.debug("Creating exploratory environment {} with name {} for 
user {}",
                                formDTO.getImage(), formDTO.getName(), 
userInfo.getName());
-               if (!UserRoles.checkAccess(userInfo, RoleType.EXPLORATORY, 
formDTO.getImage())) {
+               if (!UserRoles.checkAccess(userInfo, RoleType.EXPLORATORY, 
formDTO.getImage(), userInfo.getRoles())) {
                        log.warn("Unauthorized attempt to create a {} by user 
{}", formDTO.getImage(), userInfo.getName());
                        throw new DlabException("You do not have the privileges 
to create a " + formDTO.getTemplateName());
                }
-               String uuid = exploratoryService.create(userInfo, 
getExploratory(formDTO), "");
+               String uuid = exploratoryService.create(userInfo, 
getExploratory(formDTO), formDTO.getProject());
                return Response.ok(uuid).build();
 
        }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
index 5d8adfe..14a6572 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
@@ -32,10 +32,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.Authorization;
 
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
 
 /**
@@ -61,11 +58,12 @@ public class InfrastructureTemplateResource implements 
DockerAPI {
         * @param userInfo user info.
         */
        @GET
-       @Path("/computational_templates")
+       @Path("/{project}/computational_templates")
        @ApiOperation("Returns list of cluster's templates")
        public Iterable<FullComputationalTemplate> 
getComputationalTemplates(@ApiParam(hidden = true)
-                                                                               
                                                                 @Auth UserInfo 
userInfo) {
-               return 
infrastructureTemplateService.getComputationalTemplates(userInfo);
+                                                                               
                                                                 @Auth UserInfo 
userInfo,
+                                                                               
                                                                 
@PathParam("project") String project) {
+               return 
infrastructureTemplateService.getComputationalTemplates(userInfo, project);
        }
 
        /**
@@ -74,10 +72,11 @@ public class InfrastructureTemplateResource implements 
DockerAPI {
         * @param userInfo user info.
         */
        @GET
-       @Path("/exploratory_templates")
+       @Path("/{project}/exploratory_templates")
        @ApiOperation("Returns list of notebook's templates")
-       public Iterable<ExploratoryMetadataDTO> 
getExploratoryTemplates(@ApiParam(hidden = true) @Auth UserInfo userInfo) {
-               return 
infrastructureTemplateService.getExploratoryTemplates(userInfo);
+       public Iterable<ExploratoryMetadataDTO> 
getExploratoryTemplates(@ApiParam(hidden = true) @Auth UserInfo userInfo,
+                                                                               
                                                        @PathParam("project") 
String project) {
+               return 
infrastructureTemplateService.getExploratoryTemplates(userInfo, project);
        }
 }
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
index 6346082..68771ad 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
@@ -105,7 +105,7 @@ public class ComputationalResourceAws implements 
ComputationalAPI {
                                        .version(form.getVersion())
                                        .build();
                        boolean resourceAdded = 
computationalService.createDataEngineService(userInfo, form,
-                                       awsComputationalResource);
+                                       awsComputationalResource, 
form.getProject());
                        return resourceAdded ? Response.ok().build() : 
Response.status(Response.Status.FOUND).build();
                }
 
@@ -133,7 +133,7 @@ public class ComputationalResourceAws implements 
ComputationalAPI {
                log.debug("Create computational resources for {} | form is {}", 
userInfo.getName(), form);
 
                validate(form);
-               return computationalService.createSparkCluster(userInfo, form)
+               return computationalService.createSparkCluster(userInfo, form, 
form.getProject())
                                ? Response.ok().build()
                                : 
Response.status(Response.Status.FOUND).build();
        }
@@ -195,17 +195,19 @@ public class ComputationalResourceAws implements 
ComputationalAPI {
         * @return 200 OK if operation is successfully triggered
         */
        @PUT
-       @Path("/{exploratoryName}/{computationalName}/start")
+       @Path("/{project}/{exploratoryName}/{computationalName}/start")
        @ApiOperation("Starts Spark cluster on AWS")
        @ApiResponses(@ApiResponse(code = 200, message = "Spark cluster on AWS 
successfully started"))
        public Response start(@ApiParam(hidden = true) @Auth UserInfo userInfo,
                                                  @ApiParam(value = "Notebook's 
name corresponding to Spark cluster", required = true)
                                                  @PathParam("exploratoryName") 
String exploratoryName,
                                                  @ApiParam(value = "Spark 
cluster's name for starting", required = true)
-                                                 
@PathParam("computationalName") String computationalName) {
+                                                 
@PathParam("computationalName") String computationalName,
+                                                 @ApiParam(value = "Project 
name", required = true)
+                                                 @PathParam("project") String 
project) {
                log.debug("Starting computational resource {} for user {}", 
computationalName, userInfo.getName());
 
-               computationalService.startSparkCluster(userInfo, 
exploratoryName, computationalName);
+               computationalService.startSparkCluster(userInfo, 
exploratoryName, computationalName, project);
 
                return Response.ok().build();
        }
@@ -260,7 +262,7 @@ public class ComputationalResourceAws implements 
ComputationalAPI {
        }
 
        private void validate(UserInfo userInfo, AwsComputationalCreateForm 
formDTO) {
-               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
formDTO.getImage())) {
+               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
formDTO.getImage(), userInfo.getRoles())) {
                        log.warn("Unauthorized attempt to create a {} by user 
{}", formDTO.getImage(), userInfo.getName());
                        throw new DlabException("You do not have the privileges 
to create a " + formDTO.getTemplateName());
                }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
index dcac05f..3441ada 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
@@ -95,12 +95,12 @@ public class ComputationalResourceAzure {
                                                                         @Valid 
@NotNull SparkStandaloneClusterCreateForm form) {
                log.debug("Create computational resources for {} | form is {}", 
userInfo.getName(), form);
 
-               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
form.getImage())) {
+               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
form.getImage(), userInfo.getRoles())) {
                        log.warn("Unauthorized attempt to create a {} by user 
{}", form.getImage(), userInfo.getName());
                        throw new DlabException("You do not have the privileges 
to create a " + form.getTemplateName());
                }
 
-               return computationalService.createSparkCluster(userInfo, form)
+               return computationalService.createSparkCluster(userInfo, form, 
form.getProject())
                                ? Response.ok().build()
                                : 
Response.status(Response.Status.FOUND).build();
 
@@ -165,17 +165,19 @@ public class ComputationalResourceAzure {
         * @return 200 OK if operation is successfully triggered
         */
        @PUT
-       @Path("/{exploratoryName}/{computationalName}/start")
+       @Path("/{project}/{exploratoryName}/{computationalName}/start")
        @ApiOperation("Starts Spark cluster on Azure")
        @ApiResponses(@ApiResponse(code = 200, message = "Spark cluster on 
Azure successfully started"))
        public Response start(@ApiParam(hidden = true) @Auth UserInfo userInfo,
                                                  @ApiParam(value = "Notebook's 
name corresponding to Spark cluster", required = true)
                                                  @PathParam("exploratoryName") 
String exploratoryName,
                                                  @ApiParam(value = "Spark 
cluster's name for starting", required = true)
-                                                 
@PathParam("computationalName") String computationalName) {
+                                                 
@PathParam("computationalName") String computationalName,
+                                                 @ApiParam(value = "Project 
name", required = true)
+                                                 @PathParam("project") String 
project) {
                log.debug("Starting computational resource {} for user {}", 
computationalName, userInfo.getName());
 
-               computationalService.startSparkCluster(userInfo, 
exploratoryName, computationalName);
+               computationalService.startSparkCluster(userInfo, 
exploratoryName, computationalName, project);
 
                return Response.ok().build();
        }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
index 98d51e6..baf9bc7 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
@@ -46,6 +46,10 @@ public class ComputationalCreateFormDTO {
        private String name;
 
        @NotBlank
+       @JsonProperty
+       private String project;
+
+       @NotBlank
        @JsonProperty("notebook_name")
        private String notebookName;
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
index c1dee78..53357d5 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
@@ -44,6 +44,10 @@ public class ExploratoryCreateFormDTO {
 
        @NotBlank
        @JsonProperty
+       private String project;
+
+       @NotBlank
+       @JsonProperty
        private String shape;
 
        @NotBlank
@@ -144,6 +148,14 @@ public class ExploratoryCreateFormDTO {
                return clusterConfig;
        }
 
+       public String getProject() {
+               return project;
+       }
+
+       public void setProject(String project) {
+               this.project = project;
+       }
+
        @Override
        public String toString() {
                return MoreObjects.toStringHelper(this)
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
index 87b7b02..f213e28 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
@@ -100,7 +100,7 @@ public class ComputationalResourceGcp implements 
ComputationalAPI {
                                        .version(formDTO.getVersion())
                                        .build();
                        boolean resourceAdded = 
computationalService.createDataEngineService(userInfo, formDTO,
-                                       gcpComputationalResource);
+                                       gcpComputationalResource, 
formDTO.getProject());
                        return resourceAdded ? Response.ok().build() : 
Response.status(Response.Status.FOUND).build();
                }
 
@@ -127,12 +127,12 @@ public class ComputationalResourceGcp implements 
ComputationalAPI {
                                                                         @Valid 
@NotNull SparkStandaloneClusterCreateForm form) {
                log.debug("Create computational resources for {} | form is {}", 
userInfo.getName(), form);
 
-               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
form.getImage())) {
+               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
form.getImage(), userInfo.getRoles())) {
                        log.warn("Unauthorized attempt to create a {} by user 
{}", form.getImage(), userInfo.getName());
                        throw new DlabException("You do not have the privileges 
to create a " + form.getTemplateName());
                }
 
-               return computationalService.createSparkCluster(userInfo, form)
+               return computationalService.createSparkCluster(userInfo, form, 
form.getProject())
                                ? Response.ok().build()
                                : 
Response.status(Response.Status.FOUND).build();
        }
@@ -196,17 +196,19 @@ public class ComputationalResourceGcp implements 
ComputationalAPI {
         * @return 200 OK if operation is successfully triggered
         */
        @PUT
-       @Path("/{exploratoryName}/{computationalName}/start")
+       @Path("/{project}/{exploratoryName}/{computationalName}/start")
        @ApiOperation("Starts Spark cluster on GCP")
        @ApiResponses(@ApiResponse(code = 200, message = "Spark cluster on GCP 
successfully started"))
        public Response start(@ApiParam(hidden = true) @Auth UserInfo userInfo,
                                                  @ApiParam(value = "Notebook's 
name corresponding to Spark cluster", required = true)
                                                  @PathParam("exploratoryName") 
String exploratoryName,
                                                  @ApiParam(value = "Spark 
cluster's name for starting", required = true)
-                                                 
@PathParam("computationalName") String computationalName) {
+                                                 
@PathParam("computationalName") String computationalName,
+                                                 @ApiParam(value = "Project 
name", required = true)
+                                                 @PathParam("project") String 
project) {
                log.debug("Starting computational resource {} for user {}", 
computationalName, userInfo.getName());
 
-               computationalService.startSparkCluster(userInfo, 
exploratoryName, computationalName);
+               computationalService.startSparkCluster(userInfo, 
exploratoryName, computationalName, project);
 
                return Response.ok().build();
        }
@@ -246,7 +248,7 @@ public class ComputationalResourceGcp implements 
ComputationalAPI {
        }
 
        private void validate(@Auth UserInfo userInfo, 
GcpComputationalCreateForm formDTO) {
-               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
formDTO.getImage())) {
+               if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL, 
formDTO.getImage(), userInfo.getRoles())) {
                        log.warn("Unauthorized attempt to create a {} by user 
{}", formDTO.getImage(), userInfo.getName());
                        throw new DlabException("You do not have the privileges 
to create a " + formDTO.getTemplateName());
                }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
index 032d232..a1fabd1 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
@@ -88,28 +88,31 @@ public class UserRoles {
         * @param userInfo user info.
         * @param type     the type of role.
         * @param name     the name of role.
+        * @param roles
         * @return boolean value
         */
-       public static boolean checkAccess(UserInfo userInfo, RoleType type, 
String name) {
-               return checkAccess(userInfo, type, name, true);
+       public static boolean checkAccess(UserInfo userInfo, RoleType type, 
String name, Collection<String> roles) {
+               return checkAccess(userInfo, type, name, true, roles);
        }
 
        public static boolean isAdmin(UserInfo userInfo) {
                final List<UserRole> roles = UserRoles.getRoles();
                return roles == null || roles.stream().anyMatch(r -> 
ADMIN_ROLE_NAME.equals(r.getId()) &&
-                               (userRoles.hasAccessByGroup(userInfo, r) || 
userRoles.hasAccessByUserName(userInfo, r)));
+                               (userRoles.hasAccessByGroup(userInfo, r, 
userInfo.getRoles()) || userRoles.hasAccessByUserName(userInfo, r)));
        }
 
        /**
         * Check access for user to the role.
         *
+        * @param roles
         * @param userInfo user info.
         * @param type     the type of role.
         * @param name     the name of role.
         * @return boolean value
         */
-       public static boolean checkAccess(UserInfo userInfo, RoleType type, 
String name, boolean useDefault) {
-               return (userRoles == null || userRoles.hasAccess(userInfo, 
type, name, useDefault));
+       public static boolean checkAccess(UserInfo userInfo, RoleType type, 
String name, boolean useDefault,
+                                                                         
Collection<String> roles) {
+               return (userRoles == null || userRoles.hasAccess(userInfo, 
type, name, useDefault, roles));
        }
 
        /**
@@ -216,9 +219,11 @@ public class UserRoles {
         * @param type       the type of role.
         * @param name       the name of role.
         * @param useDefault true/false
+        * @param roles
         * @return boolean value
         */
-       private boolean hasAccess(UserInfo userInfo, RoleType type, String 
name, boolean useDefault) {
+       private boolean hasAccess(UserInfo userInfo, RoleType type, String 
name, boolean useDefault,
+                                                         Collection<String> 
roles) {
                if (userRoles == null) {
                        return true;
                }
@@ -228,18 +233,18 @@ public class UserRoles {
                if (role == null) {
                        return checkDefault(useDefault);
                }
-               if (hasAccessByGroup(userInfo, role)) return true;
+               if (hasAccessByGroup(userInfo, role, roles)) return true;
                LOGGER.trace("Access denied for user {} to {}/{}", 
userInfo.getName(), type, name);
                return false;
        }
 
-       private boolean hasAccessByGroup(UserInfo userInfo, UserRole role) {
+       private boolean hasAccessByGroup(UserInfo userInfo, UserRole role, 
Collection<String> userRoles) {
                Set<String> groups = role.getGroups();
                if (groups != null) {
                        if (groups.contains(ANY_USER)) {
                                return true;
                        }
-                       for (String group : userInfo.getRoles()) {
+                       for (String group : userRoles) {
                                if (group != null && 
groups.contains(group.toLowerCase())) {
                                        LOGGER.trace("Got access by group {}", 
group);
                                        return true;
@@ -248,7 +253,7 @@ public class UserRoles {
 
                        final Optional<String> group = role.getGroups()
                                        .stream()
-                                       .filter(g -> userGroups.getOrDefault(g, 
Collections.emptySet()).contains(userInfo.getName()))
+                                       .filter(g -> userRoles.contains(g) && 
userGroups.getOrDefault(g, Collections.emptySet()).contains(userInfo.getName()))
                                        .findAny();
                        if (group.isPresent()) {
                                LOGGER.trace("Got access by local group {}", 
group.get());
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
index 75d2b2b..4d6eba5 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
@@ -26,7 +26,7 @@ import com.epam.dlab.dto.imagemetadata.ExploratoryMetadataDTO;
 import java.util.List;
 
 public interface InfrastructureTemplateService {
-       List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo user);
+       List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo user, 
String project);
 
-       List<FullComputationalTemplate> getComputationalTemplates(UserInfo 
user);
+       List<FullComputationalTemplate> getComputationalTemplates(UserInfo 
user, String project);
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index bdfa155..a03f9c9 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -95,7 +95,7 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
        public String create(UserInfo userInfo, Exploratory exploratory, 
@Project String project) {
                boolean isAdded = false;
                try {
-                       
exploratoryDAO.insertExploratory(getUserInstanceDTO(userInfo, exploratory));
+                       
exploratoryDAO.insertExploratory(getUserInstanceDTO(userInfo, exploratory, 
project));
                        isAdded = true;
                        final ExploratoryGitCredsDTO gitCreds = 
gitCredsDAO.findGitCreds(userInfo.getName());
                        log.debug("Created exploratory environment {} for user 
{}", exploratory.getName(), userInfo.getName());
@@ -310,7 +310,7 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                                .withStatus(status);
        }
 
-       private UserInstanceDTO getUserInstanceDTO(UserInfo userInfo, 
Exploratory exploratory) {
+       private UserInstanceDTO getUserInstanceDTO(UserInfo userInfo, 
Exploratory exploratory, String project) {
                final UserInstanceDTO userInstance = new UserInstanceDTO()
                                .withUser(userInfo.getName())
                                .withExploratoryName(exploratory.getName())
@@ -319,7 +319,8 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                                .withImageVersion(exploratory.getVersion())
                                .withTemplateName(exploratory.getTemplateName())
                                
.withClusterConfig(exploratory.getClusterConfig())
-                               .withShape(exploratory.getShape());
+                               .withShape(exploratory.getShape())
+                               .withProject(project);
                if (StringUtils.isNotBlank(exploratory.getImageName())) {
                        final List<LibInstallDTO> libInstallDtoList = 
getImageRelatedLibraries(userInfo, exploratory
                                        .getImageName());
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
index 4193fc6..e597d94 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
@@ -21,7 +21,9 @@ package com.epam.dlab.backendapi.service.impl;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
+import com.epam.dlab.backendapi.dao.ProjectDAO;
 import com.epam.dlab.backendapi.dao.SettingsDAO;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.resources.dto.SparkStandaloneConfiguration;
 import com.epam.dlab.backendapi.roles.RoleType;
 import com.epam.dlab.backendapi.roles.UserRoles;
@@ -43,6 +45,7 @@ import lombok.extern.slf4j.Slf4j;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.epam.dlab.rest.contracts.DockerAPI.DOCKER_COMPUTATIONAL;
@@ -56,6 +59,8 @@ public abstract class InfrastructureTemplateServiceBase 
implements Infrastructur
 
        @Inject
        private SettingsDAO settingsDAO;
+       @Inject
+       private ProjectDAO projectDAO;
 
 
        @Inject
@@ -63,18 +68,20 @@ public abstract class InfrastructureTemplateServiceBase 
implements Infrastructur
        private RESTService provisioningService;
 
        @Override
-       public List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo 
user) {
+       public List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo 
user, String project) {
 
-               log.debug("Loading list of exploratory templates for user {}", 
user.getName());
+               log.debug("Loading list of exploratory templates for user {} 
for project {}", user.getName(), project);
                try {
                        ExploratoryMetadataDTO[] array =
                                        
provisioningService.get(DOCKER_EXPLORATORY, user.getAccessToken(), 
ExploratoryMetadataDTO[].class);
 
+                       final Set<String> roles = getRoles(user, project);
                        return Arrays.stream(array)
                                        .peek(e -> 
e.setImage(getSimpleImageName(e.getImage())))
                                        .filter(e -> 
exploratoryGpuIssuesAzureFilter(e) &&
-                                                       
UserRoles.checkAccess(user, RoleType.EXPLORATORY, e.getImage()))
-                                       .peek(e -> filterShapes(user, 
e.getExploratoryEnvironmentShapes(), RoleType.EXPLORATORY_SHAPES))
+                                                       
UserRoles.checkAccess(user, RoleType.EXPLORATORY, e.getImage(), roles))
+                                       .peek(e -> filterShapes(user, 
e.getExploratoryEnvironmentShapes(), RoleType.EXPLORATORY_SHAPES,
+                                                       roles))
                                        .collect(Collectors.toList());
 
                } catch (DlabException e) {
@@ -89,15 +96,16 @@ public abstract class InfrastructureTemplateServiceBase 
implements Infrastructur
         * @param user              user
         * @param environmentShapes shape types
         * @param roleType
+        * @param roles
         */
        private void filterShapes(UserInfo user, Map<String, 
List<ComputationalResourceShapeDto>> environmentShapes,
-                                                         RoleType roleType) {
+                                                         RoleType roleType, 
Set<String> roles) {
                environmentShapes.forEach((k, v) -> v.removeIf(compResShapeDto 
->
-                               !UserRoles.checkAccess(user, roleType, 
compResShapeDto.getType())));
+                               !UserRoles.checkAccess(user, roleType, 
compResShapeDto.getType(), roles)));
        }
 
        @Override
-       public List<FullComputationalTemplate> 
getComputationalTemplates(UserInfo user) {
+       public List<FullComputationalTemplate> 
getComputationalTemplates(UserInfo user, String project) {
 
                log.debug("Loading list of computational templates for user 
{}", user.getName());
                try {
@@ -105,10 +113,13 @@ public abstract class InfrastructureTemplateServiceBase 
implements Infrastructur
                                        
provisioningService.get(DOCKER_COMPUTATIONAL, user.getAccessToken(), 
ComputationalMetadataDTO[]
                                                        .class);
 
+                       final Set<String> roles = getRoles(user, project);
+
                        return Arrays.stream(array)
                                        .peek(e -> 
e.setImage(getSimpleImageName(e.getImage())))
-                                       .peek(e -> filterShapes(user, 
e.getComputationResourceShapes(), RoleType.COMPUTATIONAL_SHAPES))
-                                       .filter(e -> 
UserRoles.checkAccess(user, RoleType.COMPUTATIONAL, e.getImage()))
+                                       .peek(e -> filterShapes(user, 
e.getComputationResourceShapes(), RoleType.COMPUTATIONAL_SHAPES,
+                                                       user.getRoles()))
+                                       .filter(e -> 
UserRoles.checkAccess(user, RoleType.COMPUTATIONAL, e.getImage(), roles))
                                        .map(this::fullComputationalTemplate)
                                        .collect(Collectors.toList());
 
@@ -118,6 +129,12 @@ public abstract class InfrastructureTemplateServiceBase 
implements Infrastructur
                }
        }
 
+       private Set<String> getRoles(UserInfo user, String project) {
+               return projectDAO.get(project)
+                               .map(ProjectDTO::getGroups)
+                               .orElse(user.getRoles());
+       }
+
        protected abstract FullComputationalTemplate 
getCloudFullComputationalTemplate(ComputationalMetadataDTO
                                                                                
                                                                                
                   metadataDTO);
 
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
index 0266a8b..0462732 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
@@ -74,7 +74,7 @@ public class ExploratoryResourceTest extends TestBase {
                assertEquals("someUuid", response.readEntity(String.class));
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               verify(exploratoryService).create(getUserInfo(), 
getExploratory(getExploratoryCreateFormDTO()), "");
+               verify(exploratoryService).create(getUserInfo(), 
getExploratory(getExploratoryCreateFormDTO()), "project");
                verifyNoMoreInteractions(exploratoryService);
        }
 
@@ -111,7 +111,7 @@ public class ExploratoryResourceTest extends TestBase {
                assertTrue(actualJson.contains(expectedJson));
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               verify(exploratoryService).create(getUserInfo(), 
getExploratory(getExploratoryCreateFormDTO()), anyString());
+               verify(exploratoryService).create(getUserInfo(), 
getExploratory(getExploratoryCreateFormDTO()), "project");
                verifyNoMoreInteractions(exploratoryService);
        }
 
@@ -303,6 +303,7 @@ public class ExploratoryResourceTest extends TestBase {
                ecfDto.setShape("someShape");
                ecfDto.setVersion("someVersion");
                ecfDto.setImageName("someImageName");
+               ecfDto.setProject("project");
                return ecfDto;
        }
 
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
index a054ff7..f4f57db 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
@@ -60,10 +60,10 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
        public void getComputationalTemplates() {
                FullComputationalTemplate fullComputationalTemplate =
                                new FullComputationalTemplate(new 
ComputationalMetadataDTO());
-               
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class)))
+               
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class),
 anyString()))
                                
.thenReturn(Collections.singletonList(fullComputationalTemplate));
                final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_templates/computational_templates")
+                               
.target("/infrastructure_templates/test/computational_templates")
                                .request()
                                .header("Authorization", "Bearer " + TOKEN)
                                .get();
@@ -71,7 +71,7 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                assertEquals(HttpStatus.SC_OK, response.getStatus());
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo());
+               
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo(), 
"test");
                verifyNoMoreInteractions(infrastructureTemplateService);
        }
 
@@ -80,10 +80,10 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                authFailSetup();
                FullComputationalTemplate fullComputationalTemplate =
                                new FullComputationalTemplate(new 
ComputationalMetadataDTO());
-               
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class)))
+               
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class),
 anyString()))
                                
.thenReturn(Collections.singletonList(fullComputationalTemplate));
                final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_templates/computational_templates")
+                               
.target("/infrastructure_templates/test/computational_templates")
                                .request()
                                .header("Authorization", "Bearer " + TOKEN)
                                .get();
@@ -91,16 +91,16 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                assertEquals(HttpStatus.SC_OK, response.getStatus());
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo());
+               
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo(), 
"test");
                verifyNoMoreInteractions(infrastructureTemplateService);
        }
 
        @Test
        public void getComputationalTemplatesWithException() {
                doThrow(new DlabException("Could not load list of computational 
templates for user"))
-                               
.when(infrastructureTemplateService).getComputationalTemplates(any(UserInfo.class));
+                               
.when(infrastructureTemplateService).getComputationalTemplates(any(UserInfo.class),
 anyString());
                final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_templates/computational_templates")
+                               
.target("/infrastructure_templates/test/computational_templates")
                                .request()
                                .header("Authorization", "Bearer " + TOKEN)
                                .get();
@@ -108,7 +108,7 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, 
response.getStatus());
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo());
+               
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo(), 
"test");
                verifyNoMoreInteractions(infrastructureTemplateService);
        }
 
@@ -116,10 +116,10 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
        public void getExploratoryTemplates() {
                ExploratoryMetadataDTO exploratoryMetadataDTO =
                                new ExploratoryMetadataDTO("someImageName");
-               
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class)))
+               
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class), 
anyString()))
                                
.thenReturn(Collections.singletonList(exploratoryMetadataDTO));
                final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_templates/exploratory_templates")
+                               
.target("/infrastructure_templates/test/exploratory_templates")
                                .request()
                                .header("Authorization", "Bearer " + TOKEN)
                                .get();
@@ -130,7 +130,7 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                                }));
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo());
+               
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo(), 
"test");
                verifyNoMoreInteractions(infrastructureTemplateService);
        }
 
@@ -139,10 +139,10 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                authFailSetup();
                ExploratoryMetadataDTO exploratoryMetadataDTO =
                                new ExploratoryMetadataDTO("someImageName");
-               
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class)))
+               
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class), 
anyString()))
                                
.thenReturn(Collections.singletonList(exploratoryMetadataDTO));
                final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_templates/exploratory_templates")
+                               
.target("/infrastructure_templates/test/exploratory_templates")
                                .request()
                                .header("Authorization", "Bearer " + TOKEN)
                                .get();
@@ -153,7 +153,7 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                                }));
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo());
+               
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo(), 
"test");
                verifyNoMoreInteractions(infrastructureTemplateService);
        }
 
@@ -161,9 +161,9 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
        @Test
        public void getExploratoryTemplatesWithException() {
                doThrow(new DlabException("Could not load list of exploratory 
templates for user"))
-                               
.when(infrastructureTemplateService).getExploratoryTemplates(any(UserInfo.class));
+                               
.when(infrastructureTemplateService).getExploratoryTemplates(any(UserInfo.class),
 anyString());
                final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_templates/exploratory_templates")
+                               
.target("/infrastructure_templates/test/exploratory_templates")
                                .request()
                                .header("Authorization", "Bearer " + TOKEN)
                                .get();
@@ -171,7 +171,7 @@ public class InfrastructureTemplateResourceTest extends 
TestBase {
                assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, 
response.getStatus());
                assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
-               
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo());
+               
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo(), 
"test");
                verifyNoMoreInteractions(infrastructureTemplateService);
        }
 }
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
index d974c81..0fa4c94 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
@@ -75,14 +75,14 @@ public class UserRolesTest {
                when(cursor.next()).thenReturn(doc1).thenReturn(doc2);
                UserRoles.initialize(dao, true);
 
-               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "shape_1"));
-               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "shape_2"));
-               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "shape_3"));
-               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "someShape"));
+               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "shape_1", userInfoDev.getRoles()));
+               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "shape_2", userInfoDev.getRoles()));
+               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "shape_3", userInfoDev.getRoles()));
+               assertTrue(UserRoles.checkAccess(userInfoDev, 
RoleType.EXPLORATORY_SHAPES, "someShape", userInfoDev.getRoles()));
 
-               assertFalse(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "shape_1"));
-               assertFalse(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "shape_2"));
-               assertFalse(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "shape_3"));
-               assertTrue(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "someShape"));
+               assertFalse(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "shape_1", userInfoTest.getRoles()));
+               assertFalse(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "shape_2", userInfoTest.getRoles()));
+               assertFalse(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "shape_3", userInfoTest.getRoles()));
+               assertTrue(UserRoles.checkAccess(userInfoTest, 
RoleType.EXPLORATORY_SHAPES, "someShape", userInfoTest.getRoles()));
        }
 }
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
index 225a5c8..770274e 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
@@ -20,7 +20,9 @@
 package com.epam.dlab.backendapi.service.impl;
 
 import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.dao.ProjectDAO;
 import com.epam.dlab.backendapi.dao.SettingsDAO;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.dto.base.computational.FullComputationalTemplate;
 import com.epam.dlab.dto.imagemetadata.ComputationalMetadataDTO;
 import com.epam.dlab.dto.imagemetadata.ComputationalResourceShapeDto;
@@ -34,10 +36,7 @@ import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
 import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static org.junit.Assert.*;
@@ -50,6 +49,8 @@ public class InfrastructureTemplateServiceBaseTest {
        private SettingsDAO settingsDAO;
        @Mock
        private RESTService provisioningService;
+       @Mock
+       private ProjectDAO projectDAO;
 
        @InjectMocks
        private InfrastructureTemplateServiceBaseChild 
infrastructureTemplateServiceBaseChild =
@@ -75,12 +76,14 @@ public class InfrastructureTemplateServiceBaseTest {
                                                "someRam2", 6)));
                emDto2.setExploratoryEnvironmentShapes(shapes2);
                List<ExploratoryMetadataDTO> expectedEmdDtoList = 
Arrays.asList(emDto1, emDto2);
+               when(projectDAO.get(anyString())).thenReturn(Optional.of(new 
ProjectDTO("project", Collections.emptySet(),
+                               Collections.singleton("project"), null)));
                when(provisioningService.get(anyString(), anyString(), 
any())).thenReturn(expectedEmdDtoList.toArray());
                
when(settingsDAO.getConfOsFamily()).thenReturn("someConfOsFamily");
 
                UserInfo userInfo = new UserInfo("test", "token");
                List<ExploratoryMetadataDTO> actualEmdDtoList =
-                               
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo);
+                               
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo, 
"project");
                assertNotNull(actualEmdDtoList);
                assertEquals(expectedEmdDtoList, actualEmdDtoList);
 
@@ -96,7 +99,7 @@ public class InfrastructureTemplateServiceBaseTest {
 
                UserInfo userInfo = new UserInfo("test", "token");
                try {
-                       
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo);
+                       
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo, 
"project");
                } catch (DlabException e) {
                        assertEquals("Could not load list of exploratory 
templates for user", e.getMessage());
                }
@@ -106,11 +109,14 @@ public class InfrastructureTemplateServiceBaseTest {
 
        @Test
        public void getComputationalTemplates() throws NoSuchFieldException, 
IllegalAccessException {
+
                final ComputationalMetadataDTO computationalMetadataDTO = new 
ComputationalMetadataDTO("dataengine-service");
                
computationalMetadataDTO.setComputationResourceShapes(Collections.emptyMap());
                List<ComputationalMetadataDTO> expectedCmdDtoList = 
Collections.singletonList(
                                computationalMetadataDTO
                );
+               when(projectDAO.get(anyString())).thenReturn(Optional.of(new 
ProjectDTO("project", Collections.emptySet(),
+                               Collections.singleton("project"), null)));
                when(provisioningService.get(anyString(), anyString(), 
any())).thenReturn(expectedCmdDtoList.toArray(new 
ComputationalMetadataDTO[]{}));
 
                List<FullComputationalTemplate> expectedFullCmdDtoList = 
expectedCmdDtoList.stream()
@@ -119,7 +125,7 @@ public class InfrastructureTemplateServiceBaseTest {
 
                UserInfo userInfo = new UserInfo("test", "token");
                List<FullComputationalTemplate> actualFullCmdDtoList =
-                               
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo);
+                               
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo, 
"project");
                assertNotNull(actualFullCmdDtoList);
                assertEquals(expectedFullCmdDtoList.size(), 
actualFullCmdDtoList.size());
                for (int i = 0; i < expectedFullCmdDtoList.size(); i++) {
@@ -137,7 +143,7 @@ public class InfrastructureTemplateServiceBaseTest {
 
                UserInfo userInfo = new UserInfo("test", "token");
                try {
-                       
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo);
+                       
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo, 
"project");
                } catch (DlabException e) {
                        assertEquals("Could not load list of computational 
templates for user", e.getMessage());
                }
@@ -151,10 +157,12 @@ public class InfrastructureTemplateServiceBaseTest {
                
computationalMetadataDTO.setComputationResourceShapes(Collections.emptyMap());
                List<ComputationalMetadataDTO> expectedCmdDtoList = 
Collections.singletonList(computationalMetadataDTO);
                when(provisioningService.get(anyString(), anyString(), 
any())).thenReturn(expectedCmdDtoList.toArray(new 
ComputationalMetadataDTO[]{}));
+               when(projectDAO.get(anyString())).thenReturn(Optional.of(new 
ProjectDTO("project", Collections.emptySet(),
+                               Collections.singleton("project"), null)));
 
                UserInfo userInfo = new UserInfo("test", "token");
                try {
-                       
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo);
+                       
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo, 
"project");
                } catch (IllegalArgumentException e) {
                        assertEquals("Unknown data engine null", 
e.getMessage());
                }
@@ -165,6 +173,7 @@ public class InfrastructureTemplateServiceBaseTest {
        private boolean 
areFullComputationalTemplatesEqual(FullComputationalTemplate object1,
                                                                                
                           FullComputationalTemplate object2) throws 
NoSuchFieldException,
                        IllegalAccessException {
+               String project = "";//TODO CHANGEIT
                Field computationalMetadataDTO1 = 
object1.getClass().getDeclaredField("computationalMetadataDTO");
                computationalMetadataDTO1.setAccessible(true);
                Field computationalMetadataDTO2 = 
object2.getClass().getDeclaredField("computationalMetadataDTO");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to