我创建了用户&组织使用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可以将网站模板添加到任何组织网站
答案 0 :(得分: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);
不要忘记在最后一个块中重置权限检查器,否则相同的权限检查器可能会用于同一线程上的其他请求。