3

我分别使用 addUser() 和 addOrganization() 方法务实地创建了用户和组织。

我还可以使用 addOrganizationUsers() 方法将用户添加到该组织。

现在我已经从 liferay 控制面板创建了一个站点模板。

众所周知,我们可以为组织创建一个站点,并且在创建站点时,我们可以选择为公共和私人页面选择站点模板。

据我们所知 。公共页面 - 对成员 + 非成员可见 私人页面 - 仅对成员可见。

所以我想创建一个只包含私人页面的组织站点,这样只有组织成员才能看到它。

OrganiztionLocalServiceUtil.addOrganization(
    long userId, long parentOrganizationId, String name, String type,
    boolean recursable, long regionId, long countryId, int statusId,
    String comments, boolean site, ServiceContext serviceContext)

使用上述方法,通过指定布尔站点值“true”,将创建一个站点。

现在我想实用地向这个组织站点添加一个站点模板,这是我从控制面板创建的。

那么是否有任何 API 可以将站点模板添加到组织的任何站点

4

1 回答 1

2

不幸的是,它没有公共 API。

使用 LayoutSetPrototypeLocalServiceUtil 获取 SiteTemplate 的 ID。要按名称获取 SiteTemplate,您必须使用 dynamicQuery 或迭代 LayoutSetPrototypeLocalServiceUtil.getLayoutSetPrototypes(-1, -1) 的结果

然后在门户的上下文中调用 SitesUtil 的 applyLayoutSetPrototypes。

MethodKey methodKey = new MethodKey("com.liferay.portlet.sites.util.SitesUtil","applyLayoutSetPrototypes", Group.class, long.class, long.class, ServiceContext.class);
PortalClassInvoker.invoke(false, methodKey, organization.getGroup(), publicLayoutSetId, privateLayoutSetId, serviceContext);

为 publicLayoutSetId 指定 -1。

必须登录管理员才能执行此操作。要在启动时或在后台执行此操作,需要一个新的 ServiceContext。

类似于以下内容

ServiceContext serviceContext = new ServiceContext();
serviceContext.setAddGroupPermissions(true);
serviceContext.setAddGuestPermissions(true);
serviceContext.setSignedIn(false);
// set the following to an admin user / company or default user
User user = UserLocalServiceUtil.getDefaultUser(companyId); // or any user that has the permissions
serviceContext.setUserId(user.getUserId());
serviceContext.setCompanyId(companyId);

而且很可能您还必须设置 ThreadPermissionChecker

PrincipalThreadLocal.setName(user.getUserId());
PermissionChecker adminPermissionChecker = PermissionCheckerFactoryUtil.create(user, false);
PermissionThreadLocal.setPermissionChecker(adminPermissionChecker);

Don't forget to reset the permission checker in a final block otherwise the same permission checker might be used for other requests on the same thread.

于 2013-04-02T18:06:23.320 回答