Pearl1594 commented on a change in pull request #4128:
URL: https://github.com/apache/cloudstack/pull/4128#discussion_r451258110



##########
File path: 
api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
##########
@@ -68,11 +89,49 @@ public String getDisplayText() {
         return displayText;
     }
 
+    public Long getUserId() {
+        return userId;
+    }
+
+    public Long getDomainId() {
+        if (domainId != null) {
+            return domainId;
+        }
+        return CallContext.current().getCallingAccount().getDomainId();
+    }
+
+    public ProjectAccount.Role getRoleType(String role) {
+        String type = role.substring(0, 1).toUpperCase() + 
role.substring(1).toLowerCase();
+        if (!EnumUtils.isValidEnum(ProjectAccount.Role.class, type)) {
+            throw new InvalidParameterValueException("Only Admin or Regular 
project role types are valid");
+        }
+        return Enum.valueOf(ProjectAccount.Role.class, type);
+    }
+
+    public ProjectAccount.Role getAccountRole() {
+        if (roleType != null) {
+            return getRoleType(roleType);
+        }
+        return ProjectAccount.Role.Regular;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
     @Override
     public String getCommandName() {
         return s_name;
     }
 
+    public Boolean isSwapOwner() {
+        if (swapOwner != null) {

Review comment:
       done

##########
File path: 
api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
##########
@@ -72,6 +87,21 @@ public String getEmail() {
         return email;
     }
 
+    public Long getProjectRoleId() {
+        return projectRoleId;
+    }
+
+    public ProjectAccount.Role getRoleType() {
+        if (roleType != null) {

Review comment:
       done

##########
File path: 
api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java
##########
@@ -0,0 +1,154 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.apache.cloudstack.api.command.user.account;
+
+import org.apache.cloudstack.acl.RoleType;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseAsyncCmd;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.api.response.ProjectRoleResponse;
+import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.commons.lang3.EnumUtils;
+
+import com.cloud.event.EventTypes;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.projects.ProjectAccount;
+
+@APICommand(name = AddUserToProjectCmd.APINAME, description = "Adds user to a 
project", responseObject = SuccessResponse.class, since = "4.14",
+        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, 
authorized = {RoleType.Admin, RoleType.DomainAdmin, RoleType.ResourceAdmin, 
RoleType.User})
+public class AddUserToProjectCmd extends BaseAsyncCmd {
+    public static final String APINAME = "addUserToProject";
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name = ApiConstants.PROJECT_ID,
+            type = BaseCmd.CommandType.UUID,
+            entityType = ProjectResponse.class,
+            required = true,
+            description = "ID of the project to add the user to")
+    private Long projectId;
+
+    @Parameter(name = ApiConstants.USER_ID, type = BaseCmd.CommandType.UUID, 
entityType = UserResponse.class,
+            description = "User UUID, required for adding account from 
external provisioning system")
+    private Long userId;
+
+    @Parameter(name = ApiConstants.EMAIL, type = CommandType.STRING, 
description = "email ID of user to which invitation to the project is going to 
be sent")
+    private String email;
+
+    @Parameter(name = ApiConstants.PROJECT_ROLE_ID, type = 
BaseCmd.CommandType.UUID, entityType = ProjectRoleResponse.class,
+            description = "ID of the project role", validations = 
{ApiArgValidator.PositiveNumber})
+    private Long projectRoleId;
+
+    @Parameter(name = ApiConstants.ROLE_TYPE, type = 
BaseCmd.CommandType.STRING,
+            description = "Project role type to be assigned to the user - 
Admin/Regular")
+    private String roleType;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getProjectId() {
+        return projectId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public String getEmail() { return email; }
+
+    public Long getProjectRoleId() {
+        return projectRoleId;
+    }
+
+    public ProjectAccount.Role getRoleType() {
+        if (roleType != null) {

Review comment:
       done

##########
File path: 
api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
##########
@@ -68,11 +89,49 @@ public String getDisplayText() {
         return displayText;
     }
 
+    public Long getUserId() {
+        return userId;
+    }
+
+    public Long getDomainId() {
+        if (domainId != null) {
+            return domainId;
+        }
+        return CallContext.current().getCallingAccount().getDomainId();
+    }
+
+    public ProjectAccount.Role getRoleType(String role) {
+        String type = role.substring(0, 1).toUpperCase() + 
role.substring(1).toLowerCase();
+        if (!EnumUtils.isValidEnum(ProjectAccount.Role.class, type)) {
+            throw new InvalidParameterValueException("Only Admin or Regular 
project role types are valid");
+        }
+        return Enum.valueOf(ProjectAccount.Role.class, type);
+    }
+
+    public ProjectAccount.Role getAccountRole() {
+        if (roleType != null) {

Review comment:
       done

##########
File path: 
api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
##########
@@ -84,14 +143,38 @@ public long getEntityOwnerId() {
         return _projectService.getProjectOwner(id).getId();
     }
 
+    @Override
+    public List<Long> getEntityOwnerIds() {
+        return _projectService.getProjectOwners(id);
+    }
+
     /////////////////////////////////////////////////////
     /////////////// API Implementation///////////////////
     /////////////////////////////////////////////////////
 
     @Override
     public void execute() throws ResourceAllocationException {
         CallContext.current().setEventDetails("Project id: " + getId());
-        Project project = _projectService.updateProject(getId(), 
getDisplayText(), getAccountName());
+        if (getAccountName() != null && (getUserId() != null)) {

Review comment:
       done

##########
File path: 
engine/schema/src/main/java/org/apache/cloudstack/acl/ProjectRolePermissionVO.java
##########
@@ -0,0 +1,66 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.apache.cloudstack.acl;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "project_role_permissions")
+public class ProjectRolePermissionVO extends RolePermissionBaseVO implements 
ProjectRolePermission {
+
+    @Column(name = "project_id")
+    private long projectId;
+
+    @Column(name = "project_role_id")
+    private long projectRoleId;
+
+    @Column(name = "sort_order")
+    private long sortOrder = 0;
+
+    public ProjectRolePermissionVO() { super(); }

Review comment:
       done




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to