如何在 life ray 现有用户 table 中添加自定义字段?

How to add a custom field in life ray existing user table?

我有一个要求,网站所有者有权创建用户,并且能够查看仅由他创建的用户列表。

为了达到同样的目的,我创建了一个 portlet,它具有包含基本用户详细信息的表单。在我的操作 class 中提交表单时,我通过调用以下方法在 USER_ table 中插入用户详细信息:

    try{
    UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1, password2, 
autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, 
prefixId, suffixId, male, birthdayMonth,birthdayDay, birthdayYear, jobTitle, groupIds, 
organizationsIds, roleIds, userGroupIds, sendEmail, serviceContext);
    }
    catch(Exception e)
    {
    }

    int userCount = UserLocalServiceUtil.getUsersCount();

现在用户正在 USER_table 中创建。但是在显示用户列表时,我只需要显示由该站点所有者创建的用户。

所以我想再插入一列,例如 siteId 以及用户 table 并且在基于 siteId 获取时我想优化列表并显示在 UI.

所以我已经了解了 Expando 的概念,但我没有正确地了解如何根据我的要求使用它。

所以任何人都请建议我如何在调用 addUser 方法时插入 'siteId' 并根据此 siteID 获取用户列表。

提前致谢。

物理上添加列的唯一(强烈不推荐)方法是通过 EXT 环境修改 Liferay 核心。

排除这个,实现你需要的第一个选项是不要使用liferay "site",但是Liferay "portal instances"...有点像有不同的Liferay安装:它们都将共享相同的软件基础设施,但它们在逻辑上是不同的 Liferay 安装。 See here 获取更多信息。

如果这种方式不适用,第二种是使用Expando bridge。 通过使用它,您可以将 "virtual" 字段添加到 "User_" table 中,其中包含相关的 groupId。

您可以使用 serviceutil 的通用 get() 方法访问 expando 值。 您有两种不同的方式来访问 Expando 值。

第一个是执行 user.getExpandoBridge().get...但它需要一个用户对象...因此您应该在返回列表之前迭代任何用户。

后者是直接使用ExpandoTableLocalService、ExpandoColumnLocalService和ExpandoValueLocalService直接获取所有包含你的groupId值的expando行...

...

...但是在这一点上,为什么不直接使用自定义映射table?

您只需创建一个包含 userId 和 groupId 对的 table...获取所有按 groupId 过滤的 userId,然后对 User_ table 执行 DynamicQuery。这不是数据库的最佳形式,但您可以实现您的目标。

您只需向您的 portlet 添加一个服务层:read here 以了解 Liferay 最强大的功能之一。

这是达到您的要求的一种简洁方式...但请记住,网站不是为此目的而构思的...并且整个 LR 许可系统将忽略您以这种方式强制执行的抽象。