Skip to content

Commit c13d060

Browse files
author
Nicole Schmidt
committed
Fix API Keypair permissions to consider changes on role permission
1 parent 67fd6e0 commit c13d060

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

server/src/main/java/org/apache/cloudstack/acl/ApiKeyPairManagerImpl.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020
import com.cloud.user.User;
2121
import com.cloud.user.dao.UserDao;
2222
import com.cloud.utils.component.ManagerBase;
23+
24+
import java.util.Map;
2325
import java.util.stream.Collectors;
2426
import org.apache.cloudstack.acl.apikeypair.ApiKeyPairService;
2527
import org.apache.cloudstack.acl.apikeypair.ApiKeyPair;
2628
import org.apache.cloudstack.acl.apikeypair.ApiKeyPairPermission;
2729
import org.apache.cloudstack.acl.dao.ApiKeyPairDao;
2830
import org.apache.cloudstack.acl.dao.ApiKeyPairPermissionsDao;
29-
import org.apache.cloudstack.acl.dao.RolePermissionsDao;
3031
import org.apache.cloudstack.query.QueryService;
3132
import org.apache.commons.collections.CollectionUtils;
3233

@@ -44,15 +45,34 @@ public class ApiKeyPairManagerImpl extends ManagerBase implements ApiKeyPairServ
4445
@Inject
4546
private QueryService queryService;
4647
@Inject
47-
private RolePermissionsDao rolePermissionsDao;
48+
private RoleService roleService;
4849

4950
@Override
5051
public List<ApiKeyPairPermission> findAllPermissionsByKeyPairId(Long apiKeyPairId, Long roleId) {
5152
List<ApiKeyPairPermissionVO> allPermissions = apiKeyPairPermissionsDao.findAllByKeyPairIdSorted(apiKeyPairId);
52-
if (CollectionUtils.isNotEmpty(allPermissions)) {
53-
return allPermissions.stream().map(p -> (ApiKeyPairPermission) p).collect(Collectors.toList());
53+
List<RolePermissionEntity> rolePermissionEntity = roleService.findAllRolePermissionsEntityBy(roleId);
54+
55+
if (!CollectionUtils.isEmpty(allPermissions)) {
56+
List<RolePermissionEntity> keyPairPermissionsEntity = allPermissions.stream()
57+
.map(p -> (RolePermissionEntity) p).collect(Collectors.toList());
58+
59+
Map<String, RolePermissionEntity.Permission> rolePermissionInfo = roleService.getRoleRulesAndPermissions(rolePermissionEntity);
60+
61+
if (roleService.roleHasPermission(rolePermissionInfo, keyPairPermissionsEntity)) {
62+
return allPermissions.stream().map(p -> (ApiKeyPairPermission) p).collect(Collectors.toList());
63+
}
64+
65+
Map<String, RolePermissionEntity.Permission> keyPairPermissionInfo = roleService.getRoleRulesAndPermissions(keyPairPermissionsEntity);
66+
if (!roleService.roleHasPermission(keyPairPermissionInfo, rolePermissionEntity)) {
67+
for (RolePermissionEntity rolePermission : keyPairPermissionsEntity) {
68+
if (rolePermission.getPermission() == RolePermissionEntity.Permission.DENY && !rolePermissionEntity.contains(rolePermission)) {
69+
rolePermissionEntity.add(0, rolePermission);
70+
}
71+
}
72+
}
5473
}
55-
return rolePermissionsDao.findAllByRoleIdSorted(roleId).stream().map(p -> {
74+
75+
return rolePermissionEntity.stream().map(p -> {
5676
ApiKeyPairPermissionVO permission = new ApiKeyPairPermissionVO();
5777
permission.setRule(p.getRule().getRuleString());
5878
permission.setDescription(p.getDescription());

0 commit comments

Comments
 (0)