Skip to content

Commit 6b0ac41

Browse files
authored
Merge pull request #1152 from fzs/fixAdminRoleLDAP
Set "can admin" permission on LDAP users and teams correctly
2 parents dfa3c3d + 3b02737 commit 6b0ac41

File tree

3 files changed

+296
-19
lines changed

3 files changed

+296
-19
lines changed

src/main/java/com/gitblit/auth/LdapAuthProvider.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ public synchronized void sync() {
171171
final Map<String, TeamModel> userTeams = new HashMap<String, TeamModel>();
172172
for (UserModel user : ldapUsers.values()) {
173173
for (TeamModel userTeam : user.teams) {
174+
// Is this an administrative team?
175+
setAdminAttribute(userTeam);
174176
userTeams.put(userTeam.name, userTeam);
175177
}
176178
}
@@ -238,10 +240,7 @@ public boolean supportsTeamMembershipChanges() {
238240
public boolean supportsRoleChanges(UserModel user, Role role) {
239241
if (Role.ADMIN == role) {
240242
if (!supportsTeamMembershipChanges()) {
241-
List<String> admins = settings.getStrings(Keys.realm.ldap.admins);
242-
if (admins.contains(user.username)) {
243-
return false;
244-
}
243+
return false;
245244
}
246245
}
247246
return true;
@@ -251,10 +250,7 @@ public boolean supportsRoleChanges(UserModel user, Role role) {
251250
public boolean supportsRoleChanges(TeamModel team, Role role) {
252251
if (Role.ADMIN == role) {
253252
if (!supportsTeamMembershipChanges()) {
254-
List<String> admins = settings.getStrings(Keys.realm.ldap.admins);
255-
if (admins.contains("@" + team.name)) {
256-
return false;
257-
}
253+
return false;
258254
}
259255
}
260256
return true;
@@ -325,6 +321,8 @@ public UserModel authenticate(String username, char[] password) {
325321

326322
if (!supportsTeamMembershipChanges()) {
327323
for (TeamModel userTeam : user.teams) {
324+
// Is this an administrative team?
325+
setAdminAttribute(userTeam);
328326
updateTeam(userTeam);
329327
}
330328
}
@@ -355,10 +353,7 @@ private void setAdminAttribute(UserModel user) {
355353
if (!ArrayUtils.isEmpty(admins)) {
356354
user.canAdmin = false;
357355
for (String admin : admins) {
358-
if (admin.startsWith("@") && user.isTeamMember(admin.substring(1))) {
359-
// admin team
360-
user.canAdmin = true;
361-
} else if (user.getName().equalsIgnoreCase(admin)) {
356+
if (user.getName().equalsIgnoreCase(admin)) {
362357
// admin user
363358
user.canAdmin = true;
364359
}
@@ -367,6 +362,30 @@ private void setAdminAttribute(UserModel user) {
367362
}
368363
}
369364

365+
/**
366+
* Set the canAdmin attribute for team retrieved from LDAP.
367+
* If we are not storing teams in LDAP and/or we have not defined any
368+
* administrator teams, then do not change the admin flag.
369+
*
370+
* @param team
371+
*/
372+
private void setAdminAttribute(TeamModel team) {
373+
if (!supportsTeamMembershipChanges()) {
374+
List<String> admins = settings.getStrings(Keys.realm.ldap.admins);
375+
// if we have defined administrative teams, then set admin flag
376+
// otherwise leave admin flag unchanged
377+
if (!ArrayUtils.isEmpty(admins)) {
378+
team.canAdmin = false;
379+
for (String admin : admins) {
380+
if (admin.startsWith("@") && team.name.equalsIgnoreCase(admin.substring(1))) {
381+
// admin team
382+
team.canAdmin = true;
383+
}
384+
}
385+
}
386+
}
387+
}
388+
370389
private void setUserAttributes(UserModel user, SearchResultEntry userEntry) {
371390
// Is this user an admin?
372391
setAdminAttribute(user);
@@ -462,6 +481,7 @@ private void getEmptyTeamsFromLdap(LdapConnection ldapConnection) {
462481
TeamModel teamModel = userManager.getTeamModel(teamName);
463482
if (teamModel == null) {
464483
teamModel = createTeamFromLdap(teamEntry);
484+
setAdminAttribute(teamModel);
465485
userManager.updateTeamModel(teamModel);
466486
}
467487
}

0 commit comments

Comments
 (0)