【问题标题】:Deleting an user on liferay在 liferay 上删除用户
【发布时间】:2017-05-20 20:47:40
【问题描述】:

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

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

【问题讨论】:

  • 您在使用 Service 类删除用户时遇到哪些错误?数据库中遗留的任何特定引用?
  • 在 liferay 中删除用户是两个步骤,首先是停用用户,然后您可以删除它。
  • 从不建议直接更新数据库,因为很有可能产生不正确的数据。您必须提供适当的详细信息“什么不能正常工作?您看到了什么错误?”
  • 请定义“它不能正常工作”

标签: ldap liferay


【解决方案1】:

尽管我的评论是“请定义它不能正常工作”,但我想给出一个显示替代方案的答案。这不是为您提供问题的解决方案,而是解决潜在的问题。如果您需要实际回答问题的措辞,请描述您所观察到的内容。

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

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

【讨论】:

  • 我面临的问题更多地与使用相同的电子邮件地址再次创建用户有关。当我重新创建它们时,它们被导入到 liferay 数据库并且没有进行身份验证......也没有显示任何异常日志等。所以我无法找到原因......
  • 如果您已经从数据库中手动删除了行,那么所有的赌注都会被取消。你永远不应该这样做,因为这个 api 例程不能识别他们找到的数据
  • 是的,我尝试从上述表中手动删除用户。那么现在有哪些选择呢。
  • 1.建立策略以防止这种情况再次发生,2. 从备份恢复(从对数据库进行任何手动操作之前。否则:数据库已经不一致,并且很难命名现在还需要触及的每个表(以及我假设这些不是您手动对数据库所做的唯一更改)。作为急救,从控制面板中的“服务器管理”中“重新索引所有”可能会有所帮助,但这绝对不是您所需要的。
【解决方案2】:

User_ 表中获取您要删除的用户的电子邮件。并将其插入到 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);
    }
}

`

希望这会有所帮助!

【讨论】:

  • @Navankur 这就是所有的逻辑游戏。使用这个..List&lt;User&gt; users = UserLocalServiceUtil.getUsers(QueryUtil.ALL_POS, QueryUtil.ALL_POS); ArrayList&lt;String&gt; places = new ArrayList&lt;(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); } }
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2017-06-12
  • 2019-10-19
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多