java - Liferay 6.0.5 - 以编程方式在新页面中设置权限

标签 java permissions liferay portlet liferay-6

我正在动态创建一个新的liferay页面(在Liferay中称为布局)。但是,它是使用默认用户权限创建的。

我需要的是设置新页面的权限:高级用户只有“查看”权限,但我想添加“删除”、“更新”和“权限”权限。

我在网上查到的一种方法是:

long userRoleId = RoleLocalServiceUtil.getRole(companyId,
                                RoleConstants.POWER_USER).getRoleId();

ResourcePermissionLocalServiceUtil.addResourcePermission (
CompanyID,
layout.getModelClassName ().
ResourceConstants.SCOPE_INDIVIDUAL,
String.valueOf (layout.getPrimaryKey ()) userRoleId,
ActionKeys.DELETE);

另外一个是:

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);

      }

最佳答案

您可以使用此代码分配权限

Role userRole = RoleLocalServiceUtil.getRole(companyId, "POWER USER");

ResourcePermissionServiceUtil.setIndividualResourcePermissions(themeDisplay.getScopeGroupId(),
themeDisplay.getCompanyId(), Layout.class.getName(), "primKey",
userRole.getRoleId(), new String[] { ActionKeys.VIEW });

HTH

关于java - Liferay 6.0.5 - 以编程方式在新页面中设置权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17671689/

相关文章:

java - Api 注释的描述已弃用

php - 让 PHP 执行 shell 脚本的正确且安全的方法

linux - 如何授予普通用户 shell 访问特定文件夹的权限

android - 我们可以在 Android 中不请求就获得危险权限吗?

Liferay 导出/导入 LAR : automated

eclipse - LifeRay:当我构建 war 时,我的更改被删除

java - SharedPreferences 默认模式

java - Hibernate:hbm2ddl 属性值,创建删除总是删除架构,即使没有显式 SessionFactory 关闭?

java - 用 FXGraphics2D 替换 java 中的剪辑 (Java.awt)

forms - 在 Liferay 中使用 Orbeon Forms