Skip to content
Snippets Groups Projects
Commit 28ef6304 authored by srosse's avatar srosse
Browse files

OO-3984: restrict bulk changes too

parent 9db8d83e
No related branches found
No related tags found
No related merge requests found
...@@ -498,7 +498,10 @@ public class UserAdminController extends BasicController implements Activateable ...@@ -498,7 +498,10 @@ public class UserAdminController extends BasicController implements Activateable
private boolean isPasswordChangesAllowed(Identity identity) { private boolean isPasswordChangesAllowed(Identity identity) {
if (managerRoles.isManagerOf(OrganisationRoles.administrator, editedRoles) if (managerRoles.isManagerOf(OrganisationRoles.administrator, editedRoles)
|| managerRoles.isManagerOf(OrganisationRoles.rolesmanager, editedRoles)) { || managerRoles.isManagerOf(OrganisationRoles.rolesmanager, editedRoles)
|| (managerRoles.isManagerOf(OrganisationRoles.usermanager, editedRoles)
&& !editedRoles.isAdministrator() && !editedRoles.isSystemAdmin()
&& !editedRoles.isRolesManager())) {
// show pwd form only if user has also right to create new passwords in case // show pwd form only if user has also right to create new passwords in case
// of a user that has no password yet // of a user that has no password yet
if(ldapLoginModule.isLDAPEnabled() && ldapLoginManager.isIdentityInLDAPSecGroup(identity)) { if(ldapLoginModule.isLDAPEnabled() && ldapLoginManager.isIdentityInLDAPSecGroup(identity)) {
......
...@@ -39,6 +39,7 @@ import org.olat.core.gui.translator.Translator; ...@@ -39,6 +39,7 @@ import org.olat.core.gui.translator.Translator;
import org.olat.core.helpers.Settings; import org.olat.core.helpers.Settings;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.id.Preferences; import org.olat.core.id.Preferences;
import org.olat.core.id.Roles;
import org.olat.core.id.User; import org.olat.core.id.User;
import org.olat.core.id.UserConstants; import org.olat.core.id.UserConstants;
import org.olat.core.logging.OLog; import org.olat.core.logging.OLog;
...@@ -108,7 +109,7 @@ public class UserBulkChangeManager implements InitializingBean { ...@@ -108,7 +109,7 @@ public class UserBulkChangeManager implements InitializingBean {
public void changeSelectedIdentities(List<Identity> selIdentities, UserBulkChanges userBulkChanges, public void changeSelectedIdentities(List<Identity> selIdentities, UserBulkChanges userBulkChanges,
List<String> notUpdatedIdentities, boolean isAdministrativeUser, List<String> notUpdatedIdentities, boolean isAdministrativeUser,
Translator trans, Identity actingIdentity) { Translator trans, Identity actingIdentity, Roles actingRoles) {
Translator transWithFallback = userManager.getPropertyHandlerTranslator(trans); Translator transWithFallback = userManager.getPropertyHandlerTranslator(trans);
String usageIdentifyer = UserBulkChangeStep00.class.getCanonicalName(); String usageIdentifyer = UserBulkChangeStep00.class.getCanonicalName();
...@@ -128,9 +129,17 @@ public class UserBulkChangeManager implements InitializingBean { ...@@ -128,9 +129,17 @@ public class UserBulkChangeManager implements InitializingBean {
//reload identity from cache, to prevent stale object //reload identity from cache, to prevent stale object
identity = securityManager.loadIdentityByKey(identity.getKey()); identity = securityManager.loadIdentityByKey(identity.getKey());
User user = identity.getUser(); User user = identity.getUser();
Roles roles = securityManager.getRoles(identity, true);
String oldEmail = user.getEmail(); String oldEmail = user.getEmail();
String errorDesc = ""; String errorDesc = "";
boolean updateError = false; boolean updateError = false;
boolean canManagedCritical = actingRoles.isManagerOf(OrganisationRoles.administrator, roles)
|| actingRoles.isManagerOf(OrganisationRoles.rolesmanager, roles)
|| (actingRoles.isManagerOf(OrganisationRoles.usermanager, roles)
&& !roles.isAdministrator() && !roles.isSystemAdmin()
&& !roles.isRolesManager());
// change pwd // change pwd
if (attributeChangeMap.containsKey(CRED_IDENTIFYER)) { if (attributeChangeMap.containsKey(CRED_IDENTIFYER)) {
String newPwd = attributeChangeMap.get(CRED_IDENTIFYER); String newPwd = attributeChangeMap.get(CRED_IDENTIFYER);
...@@ -142,7 +151,12 @@ public class UserBulkChangeManager implements InitializingBean { ...@@ -142,7 +151,12 @@ public class UserBulkChangeManager implements InitializingBean {
} else { } else {
newPwd = null; newPwd = null;
} }
olatAuthManager.changePasswordAsAdmin(identity, newPwd);
if (canManagedCritical) {
olatAuthManager.changePasswordAsAdmin(identity, newPwd);
} else {
errorDesc = transWithFallback.translate("error.password");
}
} }
// set language // set language
...@@ -213,7 +227,7 @@ public class UserBulkChangeManager implements InitializingBean { ...@@ -213,7 +227,7 @@ public class UserBulkChangeManager implements InitializingBean {
// set status // set status
if (userBulkChanges.getStatus() != null) { if (canManagedCritical && userBulkChanges.getStatus() != null) {
Integer status = userBulkChanges.getStatus(); Integer status = userBulkChanges.getStatus();
String newStatusText = getStatusText(status); String newStatusText = getStatusText(status);
Integer oldStatus = identity.getStatus(); Integer oldStatus = identity.getStatus();
......
...@@ -402,7 +402,7 @@ public class UserSearchTableController extends FormBasicController implements Ac ...@@ -402,7 +402,7 @@ public class UserSearchTableController extends FormBasicController implements Ac
final UserBulkChanges userBulkChanges = new UserBulkChanges(); final UserBulkChanges userBulkChanges = new UserBulkChanges();
Step start = new UserBulkChangeStep00(ureq, identities, userBulkChanges); Step start = new UserBulkChangeStep00(ureq, identities, userBulkChanges);
// callback executed in case wizard is finished. // callback executed in case wizard is finished.
StepRunnerCallback finish = (ureq1, wControl1, runContext) -> { StepRunnerCallback finish = (uureq, wwControl, runContext) -> {
// all information to do now is within the runContext saved // all information to do now is within the runContext saved
boolean hasChanges = false; boolean hasChanges = false;
try { try {
...@@ -416,9 +416,10 @@ public class UserSearchTableController extends FormBasicController implements Ac ...@@ -416,9 +416,10 @@ public class UserSearchTableController extends FormBasicController implements Ac
if (!attributeChangeMap.isEmpty() || !roleChangeMap.isEmpty() if (!attributeChangeMap.isEmpty() || !roleChangeMap.isEmpty()
|| !ownGroups.isEmpty() || !partGroups.isEmpty() || !ownGroups.isEmpty() || !partGroups.isEmpty()
|| userBulkChanges.getStatus() != null){ || userBulkChanges.getStatus() != null){
Identity addingIdentity = ureq1.getIdentity(); Roles actingRoles = uureq.getUserSession().getRoles();
Identity actingIdentity = uureq.getIdentity();
userBulkChangesManager.changeSelectedIdentities(identities, userBulkChanges, notUpdatedIdentities, userBulkChangesManager.changeSelectedIdentities(identities, userBulkChanges, notUpdatedIdentities,
isAdministrativeUser, getTranslator(), addingIdentity); isAdministrativeUser, getTranslator(), actingIdentity, actingRoles);
hasChanges = true; hasChanges = true;
} }
runContext.put("notUpdatedIdentities", notUpdatedIdentities); runContext.put("notUpdatedIdentities", notUpdatedIdentities);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment