Skip to content

Commit 6716047

Browse files
authored
server: allow admins to blacklist vm details that users should not see (#3213)
This introduces a new global setting `user.vm.blacklisted.details` that allows admins to blacklist VM details that non-admin users should not see via the VM's settings tab. Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent bfad334 commit 6716047

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

api/src/main/java/org/apache/cloudstack/query/QueryService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public interface QueryService {
8888
static final ConfigKey<Boolean> AllowUserViewDestroyedVM = new ConfigKey<Boolean>("Advanced", Boolean.class, "allow.user.view.destroyed.vm", "false",
8989
"Determines whether users can view their destroyed or expunging vm ", true, ConfigKey.Scope.Account);
9090

91+
static final ConfigKey<String> UserVMBlacklistedDetails = new ConfigKey<String>("Advanced", String.class,
92+
"user.vm.blacklisted.details", "rootdisksize, cpuOvercommitRatio, memoryOvercommitRatio, Message.ReservedCapacityFreed.Flag",
93+
"Determines whether users can view certain VM settings", true);
94+
9195
ListResponse<UserResponse> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException;
9296

9397
ListResponse<EventResponse> searchForEvents(ListEventsCmd cmd);

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3714,6 +3714,6 @@ public String getConfigComponentName() {
37143714

37153715
@Override
37163716
public ConfigKey<?>[] getConfigKeys() {
3717-
return new ConfigKey<?>[] {AllowUserViewDestroyedVM};
3717+
return new ConfigKey<?>[] {AllowUserViewDestroyedVM, UserVMBlacklistedDetails};
37183718
}
37193719
}

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import com.cloud.api.ApiDBUtils;
4444
import com.cloud.api.ApiResponseHelper;
45+
import com.cloud.api.query.QueryManagerImpl;
4546
import com.cloud.api.query.vo.UserVmJoinVO;
4647
import com.cloud.gpu.GPU;
4748
import com.cloud.service.ServiceOfferingDetailsVO;
@@ -305,12 +306,20 @@ public UserVmResponse newUserVmResponse(ResponseView view, String objectName, Us
305306

306307
// set resource details map
307308
// Allow passing details to end user
308-
List<UserVmDetailVO> vmDetails = _userVmDetailsDao.listDetails(userVm.getId());
309+
// Honour the display field and only return if display is set to true
310+
List<UserVmDetailVO> vmDetails = _userVmDetailsDao.listDetails(userVm.getId(), true);
309311
if (vmDetails != null) {
310312
Map<String, String> resourceDetails = new HashMap<String, String>();
311313
for (UserVmDetailVO userVmDetailVO : vmDetails) {
312314
resourceDetails.put(userVmDetailVO.getName(), userVmDetailVO.getValue());
313315
}
316+
// Remove blacklisted settings if user is not admin
317+
if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
318+
String[] userVmSettingsToHide = QueryManagerImpl.UserVMBlacklistedDetails.value().split(",");
319+
for (String key : userVmSettingsToHide) {
320+
resourceDetails.remove(key.trim());
321+
}
322+
}
314323
userVmResponse.setDetails(resourceDetails);
315324
}
316325

0 commit comments

Comments
 (0)