Skip to content

Commit 206ff7f

Browse files
authored
Properly filter the permission groups by scope (#426)
2 parents d47226a + 616df38 commit 206ff7f

File tree

1 file changed

+16
-26
lines changed

1 file changed

+16
-26
lines changed

src/main/java/com/michelin/cio/hudson/plugins/rolestrategy/RoleBasedAuthorizationStrategy.java

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,8 @@
4747
import hudson.model.AbstractItem;
4848
import hudson.model.Computer;
4949
import hudson.model.Descriptor;
50-
import hudson.model.Hudson;
51-
import hudson.model.Item;
5250
import hudson.model.Job;
5351
import hudson.model.Node;
54-
import hudson.model.Run;
55-
import hudson.model.View;
56-
import hudson.scm.SCM;
5752
import hudson.security.ACL;
5853
import hudson.security.AuthorizationStrategy;
5954
import hudson.security.Permission;
@@ -1646,38 +1641,27 @@ private String getCurrentUser() {
16461641
@Nullable
16471642
public List<PermissionGroup> getGroups(@NonNull String type) {
16481643
List<PermissionGroup> groups = new ArrayList<>();
1649-
List<PermissionGroup> filterGroups = new ArrayList<>(PermissionGroup.getAll());
1644+
PermissionScope permissionScope;
16501645
switch (type) {
16511646
case GLOBAL:
1647+
permissionScope = PermissionScope.JENKINS;
16521648
break;
16531649
case PROJECT:
1654-
filterGroups.remove(PermissionGroup.get(Hudson.class));
1655-
filterGroups.remove(PermissionGroup.get(Computer.class));
1656-
1657-
// RoleStrategy permissions
1658-
filterGroups.remove(PermissionGroup.get(RoleBasedAuthorizationStrategy.class));
1650+
permissionScope = PermissionScope.ITEM_GROUP;
16591651
break;
16601652
case SLAVE:
1661-
filterGroups.remove(PermissionGroup.get(Permission.class));
1662-
filterGroups.remove(PermissionGroup.get(Hudson.class));
1663-
filterGroups.remove(PermissionGroup.get(View.class));
1664-
1665-
// RoleStrategy permissions
1666-
filterGroups.remove(PermissionGroup.get(RoleBasedAuthorizationStrategy.class));
1667-
1668-
// Project, SCM and Run permissions
1669-
filterGroups.remove(PermissionGroup.get(Item.class));
1670-
filterGroups.remove(PermissionGroup.get(SCM.class));
1671-
filterGroups.remove(PermissionGroup.get(Run.class));
1653+
permissionScope = PermissionScope.COMPUTER;
16721654
break;
16731655
default:
1674-
filterGroups = new ArrayList<>();
1675-
break;
1656+
return groups;
16761657
}
1677-
for (PermissionGroup group : filterGroups) {
1658+
for (PermissionGroup group : PermissionGroup.getAll()) {
16781659
if (group == PermissionGroup.get(Permission.class)) {
16791660
continue;
16801661
}
1662+
if (!group.hasPermissionContainedBy(permissionScope)) {
1663+
continue;
1664+
}
16811665
for (Permission p : group.getPermissions()) {
16821666
if (p.getEnabled()) {
16831667
groups.add(group);
@@ -1704,9 +1688,15 @@ public boolean showPermission(String type, Permission p) {
17041688
}
17051689
return p.getEnabled();
17061690
case PROJECT:
1691+
if (!p.isContainedBy(PermissionScope.ITEM_GROUP)) {
1692+
return false;
1693+
}
17071694
return p.getEnabled();
17081695
case SLAVE:
1709-
return p != Computer.CREATE && p.getEnabled();
1696+
if (!p.isContainedBy(PermissionScope.COMPUTER)) {
1697+
return false;
1698+
}
1699+
return p.getEnabled();
17101700
default:
17111701
return false;
17121702
}

0 commit comments

Comments
 (0)