Skip to content

Commit 14d120d

Browse files
author
gitlab
committed
Merge branch 'bug25891@@2' into 'master'
[BugFix: ZSTACK-25891] Fix system role missing api permission See merge request zstackio/zstack!5983
2 parents e67b7a9 + 5ec9df1 commit 14d120d

3 files changed

Lines changed: 39 additions & 2 deletions

File tree

  • header/src/main/java/org/zstack/header/identity/rbac
  • plugin
    • ceph/src/main/java/org/zstack/storage/ceph
    • sftpBackupStorage/src/main/java/org/zstack/storage/backup/sftp

header/src/main/java/org/zstack/header/identity/rbac/RBAC.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,36 @@ public static void checkMissingRBACInfo() {
5656
}
5757
}
5858

59+
public static void checkMissingApiInRoles() {
60+
PolicyMatcher matcher = new PolicyMatcher();
61+
62+
List<String> missing = new ArrayList<>();
63+
APIMessage.apiMessageClasses.forEach(clz -> {
64+
if (clz.isAnnotationPresent(Deprecated.class) || clz.isAnnotationPresent(SuppressCredentialCheck.class)) {
65+
return;
66+
}
67+
68+
boolean adminApi = permissions.stream()
69+
.anyMatch(p -> p.adminOnlyAPIs.stream().anyMatch(s -> matcher.match(s, clz.getName())));
70+
71+
if (adminApi) {
72+
return;
73+
}
74+
75+
boolean inlclude = roles.stream()
76+
.anyMatch(p -> p.getAllowedActions().stream().anyMatch(s -> matcher.match(s, clz.getName())) || p.getExcludedActions().stream().anyMatch(s -> matcher.match(s, clz.getName())));
77+
78+
if (!inlclude) {
79+
missing.add(clz.getName());
80+
}
81+
});
82+
83+
Collections.sort(missing);
84+
if (!missing.isEmpty()) {
85+
throw new CloudRuntimeException(String.format("no RBACInfo.java describes below APIs:\n %s", StringUtils.join(missing, "\n")));
86+
}
87+
}
88+
5989
public static class RoleBuilder {
6090
private Role role = new Role();
6191
private List<String> permissionsByNames = new ArrayList<>();

plugin/ceph/src/main/java/org/zstack/storage/ceph/RBACInfo.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ public void permissions() {
1414

1515
@Override
1616
public void contributeToRoles() {
17-
17+
roleContributorBuilder()
18+
.roleName("image")
19+
.actions(APIQueryCephBackupStorageMsg.class)
20+
.build();
1821
}
1922

2023
@Override

plugin/sftpBackupStorage/src/main/java/org/zstack/storage/backup/sftp/RBACInfo.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@ public class RBACInfo implements RBACDescription {
66
@Override
77
public void permissions() {
88
permissionBuilder()
9+
.name("sftp")
910
.adminOnlyAPIs("org.zstack.storage.backup.sftp.**")
1011
.normalAPIs(APIQuerySftpBackupStorageMsg.class)
1112
.build();
1213
}
1314

1415
@Override
1516
public void contributeToRoles() {
16-
17+
roleContributorBuilder()
18+
.roleName("image")
19+
.actionsByPermissionName("sftp")
20+
.build();
1721
}
1822

1923
@Override

0 commit comments

Comments
 (0)