对于我们正在使用liferay的项目,对于我们正在使用ldap的用户处理。
从ldap删除的用户没有更新liferay的数据库,因此如果在删除用户后添加用户,则会导致问题。
我试图找出原因,似乎必须从许多表中删除用户。我们可以手动删除它,如下所述。
DELETE FROM Users_UserGroups WHERE userId = 'userid';
DELETE FROM Users_Roles WHERE userId = 'userid';
DELETE FROM Users_Orgs WHERE userId = 'userid';
DELETE FROM Contact_ WHERE userId = 'userid';
DELETE FROM Group_ WHERE classPK = 'userid';
DELETE FROM User_ WHERE userId = 'userid';
但是以编程方式我们如何做到这一点。
我尝试使用:
UserLocalServiceUtil.deleteUser(UserLocalServiceUtil
.getUserByEmailAddress(companyid, email));
但它不能正常工作。有什么其他方法可以做到这一点?
答案 0 :(得分:2)
尽管我的评论"请说明它没有正常工作",我想给出一个显示替代方案的答案。这将解决潜在的问题,而不是给你问题的解决方案。如果您需要对问题的单词进行实际回答,请描述您正在观察的内容。
删除用户是一项危险的操作:您可能会留下悬空引用,例如:如果该用户参与了portlet中的某些活动。他们可能是博客文章,内容文章或留言板消息的作者。这不是一个详尽的清单。
因此,最好只是停用用户 - 这样他们的姓名,肖像图像和其他数据即使在他们被允许登录后很长时间内也始终可用。
答案 1 :(得分:1)
从用户_ 表中获取要删除的用户的电子邮件。并将其插入ArrayList。
在我的情况下,我已将此代码放在示例程序中并运行此代码一次。
`
List<User> users = UserLocalServiceUtil.getUsers(QueryUtil.ALL_POS, QueryUtil.ALL_POS);
ArrayList<String> places = new ArrayList<String>(Arrays.asList("a@vc.com","abc@abc.com"));
for (User user : users) {
if (places.contains(user.getEmailAddress())) {
System.out.println("user "+user.getEmailAddress()+" deleted");
UserLocalServiceUtil.deleteUser(user);
}
}
`
希望这会有所帮助!!