Ldap 正在删除liferay上的用户

Ldap 正在删除liferay上的用户,ldap,liferay,Ldap,Liferay,对于一个项目,我们使用liferay;对于用户处理,我们使用ldap 从ldap中删除的用户并不是在更新liferay的数据库,因此,如果在删除用户后要添加用户,则会导致问题 我试图找出原因,似乎必须从许多表中删除用户。我们可以手动删除它,如下所述 DELETE FROM Users_UserGroups WHERE userId = 'userid'; DELETE FROM Users_Roles WHERE userId = 'userid'; DELETE FROM Users_Orgs

对于一个项目,我们使用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));

但它不能正常工作。还有什么其他方法可以做到这一点呢?

尽管我的评论是“请定义它工作不正常”,但我还是想给出一个答案,说明另一种选择。这将解决根本问题,而不是给出问题的答案。如果你需要一个问题的真实答案,请描述你所观察到的

删除用户是一个危险的操作:您可能会留下悬而未决的引用,例如,如果该用户参与了portlet中的某些活动。他们可能是博客文章、内容文章或留言板消息的作者。这并不是一份详尽的清单


因此,最好是停用一个用户——这样,即使在允许用户登录很长时间后,他们的姓名、肖像图像和其他数据也始终可用。

尽管我的评论是“请定义它工作不正常”,但我想给出一个答案,显示一个替代方案。这将解决根本问题,而不是给出问题的答案。如果你需要一个问题的真实答案,请描述你所观察到的

删除用户是一个危险的操作:您可能会留下悬而未决的引用,例如,如果该用户参与了portlet中的某些活动。他们可能是博客文章、内容文章或留言板消息的作者。这并不是一份详尽的清单


因此,最好只是停用一个用户——这样,即使在允许用户登录很久之后,他们的姓名、肖像图像和其他数据也始终可用。

用户表中获取要删除的用户的电子邮件。并将其插入ArrayList

在我的例子中,我将此代码放在一个示例程序中,并运行此代码一次

`

List users=UserLocalServiceUtil.getUsers(QueryUtil.ALL\u POS,QueryUtil.ALL\u POS);
ArrayList places=新的ArrayList(Arrays.asList(“a@vc.com","abc@abc.com"));
for(用户:用户){
if(places.contains(user.getEmailAddress())){
System.out.println(“用户”+用户.getEmailAddress()+“已删除”);
UserLocalServiceUtil.deleteUser(用户);
}
}
`


希望这有帮助

用户表中获取要删除的用户的电子邮件。并将其插入ArrayList

在我的例子中,我将此代码放在一个示例程序中,并运行此代码一次

`

List users=UserLocalServiceUtil.getUsers(QueryUtil.ALL\u POS,QueryUtil.ALL\u POS);
ArrayList places=新的ArrayList(Arrays.asList(“a@vc.com","abc@abc.com"));
for(用户:用户){
if(places.contains(user.getEmailAddress())){
System.out.println(“用户”+用户.getEmailAddress()+“已删除”);
UserLocalServiceUtil.deleteUser(用户);
}
}
`


希望这有帮助

在使用Service class删除用户时,您会遇到哪些错误?数据库中是否有任何特定的引用?在liferay中,用户删除分两步进行,首先停用用户,然后您可以将其删除。不建议在中直接更新数据库,因为生成错误数据的几率很高。您必须提供适当的详细信息“什么工作不正常?您看到了什么错误?”请定义“它工作不正常”在使用Service class删除用户时,您会遇到哪些错误?数据库中是否有任何特定的引用?在liferay中,用户删除分两步进行,首先停用用户,然后您可以将其删除。不建议在中直接更新数据库,因为生成错误数据的几率很高。您必须提供适当的详细信息“什么工作不正常?您看到了什么错误?”请定义“它工作不正常”。我面临的问题与再次创建具有相同电子邮件地址的用户更相关。当我重新创建它们时,它们会被导入到liferay数据库中,并且不会得到身份验证…这也不会显示任何异常日志等。因此,我无法找到原因…如果您已经手动从数据库中删除了行,则所有赌注都将取消。您永远不应该这样做,因为此api例程无法识别它们找到的数据。我尝试从提到的表中手动删除用户。那么现在的选择是什么呢。制定政策,避免这种情况再次发生。从备份还原(从对数据库进行任何手动操作之前开始)。否则:数据库已经不一致,很难命名现在还需要处理的每个表(我假设这些不是您手动对数据库所做的唯一更改)。作为急救,“服务器管理”中的“全部重新索引”在“控制面板”中可能会有所帮助,但这肯定不是您所需要的全部。我面临的问题更多地与使用相同的电子邮件地址再次创建用户有关。当我重新创建用户时,他们会被导入到liferay数据库中,并且不会获得身份验证…而且这不会显示任何异常日志等。因此我无法找到原因…如果您已手动删除数据库中的行所有赌注都已取消。您不应该这样做,因为此api例程无法识别它们找到的数据。我尝试从提到的表中手动删除用户。现在有哪些选项。1.建立策略以避免再次发生这种情况,2.从备份还原(在对数据库进行任何手动操作之前。否则:数据库不一致)
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);
    }
}