新しい liferay ページを動的に作成しています (Liferay ではレイアウトと呼ばれます)。ただし、デフォルトのユーザー権限で作成されます。
私が必要とするのは、新しいページのパーミッションを設定することです: パワー ユーザーにはパーミッション VIEW しかありませんが、パーミッション DELETE、UPDATE、および PERMISSIONS を追加したいと考えています。
私がインターネットでチェックした1つの方法は次のとおりです。
long userRoleId = RoleLocalServiceUtil.getRole(companyId,
RoleConstants.POWER_USER).getRoleId();
ResourcePermissionLocalServiceUtil.addResourcePermission (
CompanyID,
layout.getModelClassName ().
ResourceConstants.SCOPE_INDIVIDUAL,
String.valueOf (layout.getPrimaryKey ()) userRoleId,
ActionKeys.DELETE);
そしてもう1つは次のとおりです。
ResourcePermissionServiceUtil.setIndividualResourcePermissions(groupId,
companyId, layout.getName(Locale.FRANCE),
String.valueOf(layout.getPrimaryKey()), userRoleId,
new String[] { ActionKeys.DELETE });
私のliferayバージョンは6.0.6なので、レイアウトオブジェクトにはメソッドlayout.getModelClassName()がないため、メソッドlayout.getClass().getName()とlayout.getName(Locale.FRANCE)を試してみたところ、結果は:
NoSuchResourceException
したがって、ページのアクセス許可をプログラムで変更する方法を誰かが知っていれば、非常にありがたいです。
新しいページを作成するために使用しているコードは次のとおりです(権限を追加するコードはありません):
private void createPage(ThemeDisplay themeDisplay, String name)
throws Exception {
_log.info("createPage:" + name);
long userId = themeDisplay.getUserId();
long groupId = themeDisplay.getScopeGroupId();
long companyId = themeDisplay.getCompanyId();
boolean privateLayout = false;
long parentLayoutId = 0;
String title = null;
String description = null;
String type = LayoutConstants.TYPE_PORTLET;
boolean hidden = true;
String friendlyURL = "/cngwallboard/" + name;
ServiceContext serviceContext = new ServiceContext();
serviceContext.setScopeGroupId(groupId);
Layout layout = LayoutLocalServiceUtil.addLayout(userId, groupId,
privateLayout, parentLayoutId, name, title, description, type,
hidden, friendlyURL, serviceContext);
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout
.getLayoutType();
layoutTypePortlet.setLayoutTemplateId(userId, "3_pages2");
_log.info("setThemeId");
layout.setThemeId("wallboardconfiguration_WAR_wallboardconfigurationtheme");
LayoutSetLocalServiceUtil.updateLookAndFeel(layout.getGroupId(), false,
"wallboardconfiguration_WAR_wallboardconfigurationtheme", "01",
"", false);
PortletPreferences prefs = PortletPreferencesFactoryUtil
.getPortletSetup(layout, "118_INSTANCE_pg01", "");
prefs.setValue("layout-template-id", "2_windows_model_1");
prefs.setValue("portlet-setup-show-borders", "true");
prefs.store();
LayoutLocalServiceUtil.updateLayout(layout);
}