我要求网站所有者有权创建用户并能够查看仅由他创建的用户列表。
为了达到同样的目的,我创建了一个portlet,其中包含具有基本用户详细信息的表单。在我的操作类中提交表单时,我通过调用以下方法在USER_表中插入用户详细信息:
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_表中创建。但是在显示用户列表时,我只需要显示由该站点所有者创建的用户。
所以我想再插入一个像siteId
这样的列以及users表,并根据siteId
提取,我想优化列表并在UI上显示。
所以我已经完成了Expando概念,但我没有根据我的要求得到正确的想法。
所以任何人都可以建议我如何在调用addUser
方法的同时插入'siteId',同时根据此siteID
获取需要获取用户列表。
提前致谢。
答案 0 :(得分:2)
唯一(并且非常强烈推荐)以字面方式添加列的方法是通过EXT环境修改Liferay核心。
除此之外,实现您所需要的第一个选择是不要使用liferay" site",而是Liferay"门户实例" ...它有点喜欢使用不同的Liferay安装:它们都将共享相同的软件基础架构,但它们在逻辑上与Liferay安装不同。 See here了解更多信息。
如果这种方式不适用,第二种方法是使用Expando桥。 通过使用它,您可以添加一个"虚拟"字段到"用户_"包含相关groupId的表。
使用serviceutil的常用get()方法,您可以访问expando值。 您有两种不同的方式来访问Expando值。
第一个是执行user.getExpandoBridge()。get ...但它需要一个用户对象......所以这样你就应该在返回列表之前迭代任何用户。
后者是直接使用ExpandoTableLocalService,ExpandoColumnLocalService和ExpandoValueLocalService来直接获取包含groupId值的所有expando行......
...
...但是在这一点上,为什么你不直接使用自定义映射表?
您只需要创建一个包含userId和groupId对的表...将所有userId按groupId过滤,然后在User_表上执行DynamicQuery。这不是数据库的最佳形式,但您可以实现目标。
您只需要在portlet中添加一个服务层:read here以了解Liferay最强大的功能之一。
这是一种达到您要求的干净方式......但请记住,为此目的并未设想网站......并且整个LR权限系统将忽略您以这种方式强制执行的抽象。