@@ -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