[
https://issues.jboss.org/browse/GTNPORTAL-3285?page=com.atlassian.jira.pl...
]
Tuyen Nguyen The commented on GTNPORTAL-3285:
---------------------------------------------
When i try to resolve this issue, i see that we have an UserEventListener:
{code}
org.exoplatform.services.organization.impl.NewUserEventListener
{code}
It has method:
{code}
public void preDelete(User user) throws Exception {
PortalContainer pcontainer = PortalContainer.getInstance();
OrganizationService service =
(OrganizationService)pcontainer.getComponentInstanceOfType(OrganizationService.class);
UserProfile up = service.getUserProfileHandler().createUserProfileInstance();
up.setUserName(user.getUserName());
service.getUserProfileHandler().removeUserProfile(user.getUserName(), false);
service.getMembershipHandler().removeMembershipByUser(user.getUserName(), false);
}
{code}
It mean that user profile and membership will be removed before user is removed.
It conflict with specification of #removeUser(), it comment:
{code}
/**
* Remove an user and broadcast the event to all the registered listener. When
* the user is removed , the user profile and all the membership of the user
* should be removed as well.
*
* @param userName The user should be removed from the user database
* @param broadcast If broadcast is true, the delete user event should be
* broadcasted to all registered listener
* @return the User object after that user has been removed from
* database
* @throws Exception The exception can be thrown if the user could not
* be removed or any listeners fail to handle the
* user event.
*/
User removeUser(String userName, boolean broadcast) throws Exception;
{code}
All implement of this care to remove user-profile and membership of user when remove user.
So, this work is duplicated.
Logic of deleting user is not proper
------------------------------------
Key: GTNPORTAL-3285
URL:
https://issues.jboss.org/browse/GTNPORTAL-3285
Project: GateIn Portal
Issue Type: Feature Request
Security Level: Public(Everyone can see)
Reporter: Tuyen Nguyen The
Assignee: Tuyen Nguyen The
I try to add a listener to not allow delete Platform users. for example:
{code}
public class IntranetUserEventListenerImpl extends UserEventListener {
@Override
public void preDelete(User user) throws Exception {
//don't allow delete user
throw new MessageException(new
ApplicationMessage("IntranetUserEventListener.msg.delete-user-read-only-mode-error",
null, ApplicationMessage.WARNING));
}
{code}
This listener can help to not allow delete user, but all memberships of user still are
deleted.
Check logic of deleting users (in file
https://github.com/exoplatform/gatein-portal/blob/3.5.x-PLF/component/ide...):
we can see it deletes all membershis of an user before broadcast event
"preDelete"
{code}
public User removeUser(String userName, boolean broadcast) throws Exception {
//...
try {
// Remove all memberships and profile first
orgService.getMembershipHandler().removeMembershipByUser(userName, false);
orgService.getUserProfileHandler().removeUserProfile(userName, false);
} catch (Exception e) {
handleException("Cannot cleanup user relationships: " + userName +
"; ", e);
}
User exoUser = getPopulatedUser(userName, session);
if (broadcast) {
preDelete(exoUser);
}
try {
session.getPersistenceManager().removeUser(foundUser, true);
} catch (IdentityException e) {
handleException("Cannot remove user: " + userName + "; ",
e);
}
//...
}
{code}
Expectation:
1) broadcast preDelete(exoUser) should be run before delete anything
2) Delete user and its membership should be run in one transaction
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira