diff --git a/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java b/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java index 0335af9bf6443a170a23ca6d1ab34a38f5a5b404..85c05bd0453b3d3ce8f3f7ac74e4e7584a98a1c8 100644 --- a/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java +++ b/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java @@ -179,8 +179,7 @@ public class SystemRolesAndRightsController extends BasicController { updateSecurityGroup(myIdentity, secMgr, adminGroup, hasBeenAdmin, isAdmin); } if (iAmOlatAdmin && !myIdentity.getStatus().equals(form.getStatus()) ) { - secMgr.saveIdentityStatus(myIdentity, form.getStatus()); - identity.setStatus(form.getStatus()); + identity = secMgr.saveIdentityStatus(myIdentity, form.getStatus()); } } diff --git a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java index d375d3831d9cbb90ba54e9cc22ec34675e11fa4c..2fff30465fdacc0980bc6230668c17a51e15144c 100644 --- a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java +++ b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java @@ -191,8 +191,7 @@ public class UserBulkChangeManager extends BasicManager { // set status if (roleChangeMap.containsKey("Status")) { Integer status = Integer.parseInt(roleChangeMap.get("Status")); - secMgr.saveIdentityStatus(identity, status); - identity = (Identity) db.loadObject(identity); + identity = secMgr.saveIdentityStatus(identity, status); } // persist changes: diff --git a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java index cf16fb278c4ea60cccdae5574ac1aa6cf054eb95..1dba1513ceddad19f1e5f969e2675fa08e2e7a6a 100644 --- a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java +++ b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java @@ -70,6 +70,7 @@ import org.olat.repository.delete.service.DeletionModule; import org.olat.user.UserDataDeletable; import org.olat.user.UserManager; import org.olat.user.propertyhandlers.UserPropertyHandler; +import org.springframework.beans.factory.annotation.Autowired; /** @@ -101,6 +102,9 @@ public class UserDeletionManager extends BasicManager { private boolean managersInitialized = false; private DeletionModule deletionModule; private CoordinatorManager coordinatorManager; + + @Autowired + private BaseSecurity securityManager; /** * [used by spring] @@ -166,9 +170,7 @@ public class UserDeletionManager extends BasicManager { } private void markSendEmailEvent(Identity identity) { - identity = (Identity)DBFactory.getInstance().loadObject(identity); LifeCycleManager.createInstanceFor(identity).markTimestampFor(SEND_DELETE_EMAIL_ACTION); - DBFactory.getInstance().updateObject(identity); } /** @@ -297,7 +299,7 @@ public class UserDeletionManager extends BasicManager { logInfo("deleteUserProperties user=" + identity.getUser()); UserManager.getInstance().deleteUserProperties(identity.getUser()); // Delete all authentications for certain identity - List<Authentication> authentications = BaseSecurityManager.getInstance().getAuthentications(identity); + List<Authentication> authentications = securityManager.getAuthentications(identity); for (Iterator<Authentication> iter = authentications.iterator(); iter.hasNext();) { Authentication auth = iter.next(); logInfo("deleteAuthentication auth=" + auth); @@ -306,10 +308,9 @@ public class UserDeletionManager extends BasicManager { } //remove identity from its security groups - BaseSecurity secMgr = BaseSecurityManager.getInstance(); - List<SecurityGroup> securityGroups = BaseSecurityManager.getInstance().getSecurityGroupsForIdentity(identity); + List<SecurityGroup> securityGroups = securityManager.getSecurityGroupsForIdentity(identity); for (SecurityGroup secGroup : securityGroups) { - secMgr.removeIdentityFromSecurityGroup(identity, secGroup); + securityManager.removeIdentityFromSecurityGroup(identity, secGroup); logInfo("Removing user=" + identity + " from security group=" + secGroup.toString()); } @@ -321,47 +322,39 @@ public class UserDeletionManager extends BasicManager { rm.deleteTemporaryKey(tempKey); } - // can be used, if there is once the possibility to delete identities without db-constraints... - //if neither email nor login should be kept, REALLY DELETE Identity - /*if (!keepUserEmailAfterDeletion & !keepUserLoginAfterDeletion){ - identity = (Identity)DBFactory.getInstance().loadObject(identity); - DBFactory.getInstance().deleteObject(identity.getUser()); - DBFactory.getInstance().deleteObject(identity); - } - else { */ - identity = (Identity)DBFactory.getInstance().loadObject(identity); - //keep login-name only -> change email - if (!keepUserEmailAfterDeletion){ - List<UserPropertyHandler> userPropertyHandlers = UserManager.getInstance().getUserPropertyHandlersFor("org.olat.admin.user.UsermanagerUserSearchForm", true); - User persistedUser = identity.getUser(); - String actualProperty; - for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { - actualProperty = userPropertyHandler.getName(); - if (actualProperty.equals(UserConstants.EMAIL)){ - String oldEmail = userPropertyHandler.getUserProperty(persistedUser, null); - String newEmail = ""; - if (StringHelper.containsNonWhitespace(oldEmail)){ - newEmail = getBackupStringWithDate(oldEmail); - } - logInfo("Update user-property user=" + persistedUser); - userPropertyHandler.setUserProperty(persistedUser, newEmail); + + identity = securityManager.loadIdentityByKey(identity.getKey()); + //keep login-name only -> change email + if (!keepUserEmailAfterDeletion){ + List<UserPropertyHandler> userPropertyHandlers = UserManager.getInstance().getUserPropertyHandlersFor("org.olat.admin.user.UsermanagerUserSearchForm", true); + User persistedUser = identity.getUser(); + String actualProperty; + for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { + actualProperty = userPropertyHandler.getName(); + if (actualProperty.equals(UserConstants.EMAIL)){ + String oldEmail = userPropertyHandler.getUserProperty(persistedUser, null); + String newEmail = ""; + if (StringHelper.containsNonWhitespace(oldEmail)){ + newEmail = getBackupStringWithDate(oldEmail); } + logInfo("Update user-property user=" + persistedUser); + userPropertyHandler.setUserProperty(persistedUser, newEmail); } } - - //keep email only -> change login-name - if (!keepUserLoginAfterDeletion){ - identity.setName(newName); - } - - //keep everything, change identity.status to deleted - logInfo("Change stater identity=" + identity); - identity.setStatus(Identity.STATUS_DELETED); - DBFactory.getInstance().updateObject(identity); - LifeCycleManager.createInstanceFor(identity).deleteTimestampFor(SEND_DELETE_EMAIL_ACTION); - LifeCycleManager.createInstanceFor(identity).markTimestampFor(USER_DELETED_ACTION, createLifeCycleLogDataFor(identity)); - // } + } + //keep email only -> change login-name + if (!keepUserLoginAfterDeletion){ + identity.setName(newName); + } + + //keep everything, change identity.status to deleted + logInfo("Change stater identity=" + identity); + identity = securityManager.saveIdentityStatus(identity, Identity.STATUS_DELETED); + + LifeCycleManager.createInstanceFor(identity).deleteTimestampFor(SEND_DELETE_EMAIL_ACTION); + LifeCycleManager.createInstanceFor(identity).markTimestampFor(USER_DELETED_ACTION, createLifeCycleLogDataFor(identity)); + // TODO: chg: ev. logAudit at another place logAudit("User-Deletion: Delete all userdata for identity=" + identity); } @@ -387,24 +380,22 @@ public class UserDeletionManager extends BasicManager { * Re-activate an identity, lastLogin = now, reset deleteemaildate = null. * @param identity */ - public void setIdentityAsActiv(final Identity anIdentity) { + public Identity setIdentityAsActiv(final Identity anIdentity) { + final Identity reloadedIdentity = securityManager.setIdentityLastLogin(anIdentity); + coordinatorManager.getCoordinator().getSyncer().doInSync(OresHelper.createOLATResourceableInstance(anIdentity.getClass(), anIdentity.getKey()) , new SyncerExecutor(){ public void execute() { //o_clusterOK by:fj : must be fast - Identity identity = (Identity)DBFactory.getInstance().loadObject(anIdentity, true); - if (isLogDebugEnabled()) logDebug("setIdentityAsActiv beginSingleTransaction identity=" + identity); - identity.setLastLogin(new Date()); - LifeCycleManager lifeCycleManagerForIdenitiy = LifeCycleManager.createInstanceFor(identity); + LifeCycleManager lifeCycleManagerForIdenitiy = LifeCycleManager.createInstanceFor(reloadedIdentity); if (lifeCycleManagerForIdenitiy.lookupLifeCycleEntry(SEND_DELETE_EMAIL_ACTION) != null) { - logAudit("User-Deletion: Remove from delete-list identity=" + identity); + logAudit("User-Deletion: Remove from delete-list identity=" + reloadedIdentity); lifeCycleManagerForIdenitiy.deleteTimestampFor(SEND_DELETE_EMAIL_ACTION); } - if (isLogDebugEnabled()) logDebug("setIdentityAsActiv updateObject identity=" + identity); - DBFactory.getInstance().updateObject(identity); - if (isLogDebugEnabled()) logDebug("setIdentityAsActiv committed identity=" + identity); } }); + + return reloadedIdentity; } /** diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java index b4b2350d812828d331247c9ee8b4a70361528fb0..dbe4ef76df39da9a1bb715bd28a8a5635e4d2ba9 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurity.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java @@ -573,7 +573,14 @@ public interface BaseSecurity { /** Save an identity * @param identity Save this identity */ - public void saveIdentityStatus(Identity identity, Integer status); + public Identity saveIdentityStatus(Identity identity, Integer status); + + /** + * Set the date of the last login + * @param identity + * @return + */ + public Identity setIdentityLastLogin(Identity identity); /** * Check if identity is visible. Deleted or login-denied users are not visible. diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java index 098ed788f5509b11b460eebf513f5a5fa160ffa1..5c23cae531073f3aa76e14b9106aefe73dfdbcee 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java @@ -36,6 +36,7 @@ import java.util.Locale; import java.util.Map; import java.util.UUID; +import javax.persistence.LockModeType; import javax.persistence.TypedQuery; import org.hibernate.type.StandardBasicTypes; @@ -69,6 +70,7 @@ import org.olat.resource.OLATResourceManager; import org.olat.user.ChangePasswordController; import org.olat.user.PersonalSettingsController; import org.olat.user.UserManager; +import org.springframework.beans.factory.annotation.Autowired; /** * <h3>Description:</h3> @@ -86,6 +88,9 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { private static String GUEST_USERNAME_PREFIX = "guest_"; public static final OLATResourceable IDENTITY_EVENT_CHANNEL = OresHelper.lookupType(Identity.class); + @Autowired + private DB dbInstance; + /** * [used by spring] */ @@ -331,42 +336,6 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { .setParameter("resname", oresName) .getSingleResult(); return count.longValue() > 0; - - - -/* - String queryString; - if (checkTypeRight) { - queryString = - "select count(poi) from" - + " org.olat.basesecurity.SecurityGroupMembershipImpl as sgmsi," - + " org.olat.basesecurity.PolicyImpl as poi," - + " org.olat.resource.OLATResourceImpl as ori" - + " where sgmsi.identity = :identitykey and sgmsi.securityGroup = poi.securityGroup" - + " and poi.permission = :permission and poi.olatResource = ori" - + " and (ori.resId = :resid or ori.resId = 0) and ori.resName = :resname"; - } else { - queryString = - "select count(poi) from" - + " org.olat.basesecurity.SecurityGroupMembershipImpl as sgmsi," - + " org.olat.basesecurity.PolicyImpl as poi," - + " org.olat.resource.OLATResourceImpl as ori" - + " where sgmsi.identity = :identitykey and sgmsi.securityGroup = poi.securityGroup" - + " and poi.permission = :permission and poi.olatResource = ori" - + " and (ori.resId = :resid) and ori.resName = :resname"; - } - - DBQuery query = DBFactory.getInstance().createQuery(queryString); - query.setLong("identitykey", iimpl.getKey()); - query.setString("permission", permission); - query.setLong("resid", oresid); - query.setString("resname", oresName); - query.setCacheable(true); - List res = query.list(); - Long cntL = (Long) res.get(0); - return (cntL.longValue() > 0); // can be > 1 if identity is in more the one group having - // the permission on the olatresourceable - */ } /** @@ -893,7 +862,7 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { */ public Identity createAndPersistIdentity(String username, User user, String provider, String authusername, String credential) { IdentityImpl iimpl = new IdentityImpl(username, user); - DBFactory.getInstance().saveObject(iimpl); + dbInstance.getCurrentEntityManager().persist(iimpl); if (provider != null) { createAndPersistAuthentication(iimpl, provider, authusername, credential); } @@ -912,9 +881,9 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { * @return Identity */ public Identity createAndPersistIdentityAndUser(String username, User user, String provider, String authusername, String credential) { - DBFactory.getInstance().saveObject(user); + dbInstance.getCurrentEntityManager().persist(user); IdentityImpl iimpl = new IdentityImpl(username, user); - DBFactory.getInstance().saveObject(iimpl); + dbInstance.getCurrentEntityManager().persist(iimpl); if (provider != null) { createAndPersistAuthentication(iimpl, provider, authusername, credential); } @@ -1260,7 +1229,7 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { */ public Authentication createAndPersistAuthentication(Identity ident, String provider, String authUserName, String credential) { AuthenticationImpl authImpl = new AuthenticationImpl(ident, provider, authUserName, credential); - DBFactory.getInstance().saveObject(authImpl); + dbInstance.getCurrentEntityManager().persist(authImpl); return authImpl; } @@ -1737,11 +1706,36 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { /** * @see org.olat.basesecurity.Manager#saveIdentityStatus(org.olat.core.id.Identity) */ - public void saveIdentityStatus(Identity identity, Integer status) { - //FIXME: cg: would be nice if the updated identity is returned. no loading required afterwards. - identity = (Identity)DBFactory.getInstance().loadObject(identity.getClass(), identity.getKey()); - identity.setStatus(status); - DBFactory.getInstance().updateObject(identity); + @Override + public Identity saveIdentityStatus(Identity identity, Integer status) { + Identity reloadedIdentity = loadForUpdate(identity.getKey()); + reloadedIdentity.setStatus(status); + return dbInstance.getCurrentEntityManager().merge(reloadedIdentity); + } + + @Override + public Identity setIdentityLastLogin(Identity identity) { + Identity reloadedIdentity = loadForUpdate(identity.getKey()); + reloadedIdentity.setLastLogin(new Date()); + return dbInstance.getCurrentEntityManager().merge(reloadedIdentity); + } + + private IdentityImpl loadForUpdate(Long identityKey) { + StringBuilder sb = new StringBuilder(); + sb.append("select id from ").append(IdentityImpl.class.getName()).append(" as id") + .append(" inner join fetch id.user user ") + .append(" where id.key=:identityKey"); + + List<IdentityImpl> identity = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), IdentityImpl.class) + .setParameter("identityKey", identityKey) + .setLockMode(LockModeType.PESSIMISTIC_WRITE) + .getResultList(); + + if(identity.isEmpty()) { + return null; + } + return identity.get(0); } @Override @@ -1774,15 +1768,12 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { guestIdentity = createAndPersistIdentityAndUser(guestUsername, guestUser, null, null, null); SecurityGroup anonymousGroup = findSecurityGroupByName(Constants.GROUP_ANONYMOUS); addIdentityToSecurityGroup(guestIdentity, anonymousGroup); - return guestIdentity; - } else { - // Check if guest name has been updated in the i18n tool - if ( ! guestIdentity.getUser().getProperty(UserConstants.FIRSTNAME, locale).equals(trans.translate("user.guest"))) { - guestIdentity.getUser().setProperty(UserConstants.FIRSTNAME, trans.translate("user.guest")); - DBFactory.getInstance().updateObject(guestIdentity); - } - return guestIdentity; + } else if (!guestIdentity.getUser().getProperty(UserConstants.FIRSTNAME, locale).equals(trans.translate("user.guest"))) { + //Check if guest name has been updated in the i18n tool + guestIdentity.getUser().setProperty(UserConstants.FIRSTNAME, trans.translate("user.guest")); + guestIdentity = dbInstance.getCurrentEntityManager().merge(guestIdentity); } + return guestIdentity; } diff --git a/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubNewLangController.java b/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubNewLangController.java index 2ffee1c510523d72f82b09bccddcfed51c2d5a60..e937514971f25e9c38c7fda9968775b96e1b04ad 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubNewLangController.java +++ b/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubNewLangController.java @@ -28,8 +28,6 @@ import java.util.HashSet; import java.util.Locale; import java.util.Set; -import org.olat.core.commons.persistence.DB; -import org.olat.core.commons.persistence.DBFactory; import org.olat.core.dispatcher.DispatcherAction; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; @@ -52,6 +50,7 @@ import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.core.util.i18n.I18nManager; import org.olat.core.util.i18n.I18nModule; +import org.olat.user.UserManager; /** * Description:<br> @@ -213,10 +212,9 @@ class I18nConfigSubNewLangController extends FormBasicController { User currUser = ureq.getIdentity().getUser(); // direct DB calls have to be made here because the // user manager is not available in the core - DB db = DBFactory.getInstance(); - currUser = (User) db.loadObject(currUser); + currUser = UserManager.getInstance().loadUserByKey(currUser.getKey()); currUser.getPreferences().setLanguage(localeKey); - db.saveObject(currUser); + UserManager.getInstance().updateUser(currUser); DispatcherAction.redirectToDefaultDispatcher(ureq.getHttpResp()); } diff --git a/src/main/java/org/olat/login/auth/AuthenticationController.java b/src/main/java/org/olat/login/auth/AuthenticationController.java index 5eeab51bfb7cc862edf361b89dac760db2b78410..a1a8603ad0de1ea24fb9bc3bd7f0291fbfe4d94f 100644 --- a/src/main/java/org/olat/login/auth/AuthenticationController.java +++ b/src/main/java/org/olat/login/auth/AuthenticationController.java @@ -56,7 +56,7 @@ public abstract class AuthenticationController extends BasicController { * @param identity */ public void authenticated(UserRequest ureq, Identity identity) { - UserDeletionManager.getInstance().setIdentityAsActiv(identity); + identity = UserDeletionManager.getInstance().setIdentityAsActiv(identity); fireEvent(ureq, new AuthenticationEvent(identity)); } diff --git a/src/main/java/org/olat/user/UserManager.java b/src/main/java/org/olat/user/UserManager.java index a4559252b0e3ba6ad20c0c3dd418ede962a6fa29..8d6876f4e5e6deadc55d7e5b420b5f19b776e0a7 100644 --- a/src/main/java/org/olat/user/UserManager.java +++ b/src/main/java/org/olat/user/UserManager.java @@ -139,11 +139,6 @@ public abstract class UserManager extends BasicManager { */ public abstract void updateUser(User usr); - /** - * @param user The user to be saved - */ - public abstract void saveUser(User user); - /** * Updates the user object for a given identity * diff --git a/src/main/java/org/olat/user/UserManagerImpl.java b/src/main/java/org/olat/user/UserManagerImpl.java index 9f369ff6ddcd066c94f781c1e5ab6199302d2380..c0351b4d22eca001b319b2ebe25fde084a5a1aa4 100644 --- a/src/main/java/org/olat/user/UserManagerImpl.java +++ b/src/main/java/org/olat/user/UserManagerImpl.java @@ -42,6 +42,7 @@ import org.olat.core.util.mail.MailHelper; import org.olat.properties.Property; import org.olat.properties.PropertyManager; import org.olat.user.propertyhandlers.UserPropertyHandler; +import org.springframework.beans.factory.annotation.Autowired; /** * <h3>Description:</h3> @@ -57,6 +58,9 @@ public class UserManagerImpl extends UserManager { private static final String CHARSET = "charset"; private UserDisplayNameCreator userDisplayNameCreator; + @Autowired + private DB dbInstance; + /** * Use UserManager.getInstance(), this is a spring factory method to load the * correct user manager @@ -92,7 +96,7 @@ public class UserManagerImpl extends UserManager { */ public User createAndPersistUser(String firstName, String lastName, String email) { User user = new UserImpl(firstName, lastName, email); - DBFactory.getInstance().saveObject(user); + dbInstance.getCurrentEntityManager().persist(user); return user; } @@ -266,20 +270,13 @@ public class UserManagerImpl extends UserManager { public void updateUser(User usr) { if (usr == null) throw new AssertException("User object is null!"); DBFactory.getInstance().updateObject(usr); - } - - /** - * @see org.olat.user.UserManager#saveUser(org.olat.core.id.User) - */ - public void saveUser(User user) { - DBFactory.getInstance().saveObject(user); } /** * @see org.olat.user.UserManager#updateUserFromIdentity(org.olat.core.id.Identity) */ public boolean updateUserFromIdentity(Identity identity) { - this.updateUser(identity.getUser()); + updateUser(identity.getUser()); return true; } diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityTest.java index 1509406a3ac4e3d644f4f3585e325db0a354c8c9..a40b8aee7b765e0138d7199eb4f5321703fba50e 100644 --- a/src/test/java/org/olat/basesecurity/BaseSecurityTest.java +++ b/src/test/java/org/olat/basesecurity/BaseSecurityTest.java @@ -73,7 +73,7 @@ public class BaseSecurityTest extends OlatTestCase { Identity ident = getOrCreateIdentity("anIdentity"); Identity ident2 = getOrCreateTestIdentity("extremegroovy"); Identity deletedIdent = getOrCreateTestIdentity("delete"); - baseSecurityManager.saveIdentityStatus(deletedIdent, Identity.STATUS_DELETED); + deletedIdent = baseSecurityManager.saveIdentityStatus(deletedIdent, Identity.STATUS_DELETED); SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); baseSecurityManager.addIdentityToSecurityGroup(deletedIdent, admins); @@ -179,8 +179,8 @@ public class BaseSecurityTest extends OlatTestCase { Identity ident2 = getOrCreateTestIdentity("extremegroovy"); // add some stats - baseSecurityManager.saveIdentityStatus(ident, Identity.STATUS_ACTIV); - baseSecurityManager.saveIdentityStatus(ident2, Identity.STATUS_ACTIV); + ident = baseSecurityManager.saveIdentityStatus(ident, Identity.STATUS_ACTIV); + ident2 = baseSecurityManager.saveIdentityStatus(ident2, Identity.STATUS_ACTIV); // check on those four default groups SecurityGroup admins, authors, anonymous;