4

我已经能够根据 Liferay Plugins SDK 中的这个示例定义自定义 portlet 操作/权限

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-permissions-portlet

我想知道从 portlet 中删除自定义 portlet 操作/权限(不是模型权限)需要采取的必要步骤。

我记得观察到,当我重新部署具有修改的自定义操作/权限的 portlet 时,旧的自定义操作/权限仍然存在。

我尝试从 Tomcat 的 webapps 中删除 portlet 文件夹,并成功取消注册。但是在我使用从相应 XML 中删除的自定义操作/权限再次部署 portlet 后,我​​仍然可以在角色的定义权限中看到权限。

我尝试在 Liferay 的控制面板的服务器管理中清除权限设置,但它没有改变任何东西(它不应该)。

重新部署具有删除/修改权限的 portlet 并重新启动服务器后,我仍然看到分配给 portlet 的自定义操作/权限,但是当我选择 portlet 时,我看不到删除的权限,这就是我需要。

取消部署 portlet 是否会从 Liferay 门户和门户的数据库中删除所有相关的自定义操作/权限?还是我需要进行单独的 liferay 服务调用才能做到这一点?非常感谢这方面的任何投入。

Liferay 版本:6.1.2 CE GA3

portlet.properties

include-and-override=portlet-ext.properties
language.bundle=content.Language
resource.actions.configs=resource-actions/default.xml

资源操作/default.xml

<?xml version="1.0"?>
<!DOCTYPE resource-action-mapping PUBLIC "-//Liferay//DTD Resource Action Mapping 6.2.0//EN" "http://www.liferay.com/dtd/liferay-resource-action-mapping_6_2_0.dtd">

<resource-action-mapping>
    <portlet-resource>
        <portlet-name>1</portlet-name>
        <permissions>
            <supports>
                <action-key>ADD_SOMETHING</action-key>
                <action-key>CONFIGURATION</action-key>
                <action-key>VIEW</action-key>
            </supports>
            <site-member-defaults>
                <action-key>VIEW</action-key>
            </site-member-defaults>
            <guest-defaults>
                <action-key>VIEW</action-key>
            </guest-defaults>
            <guest-unsupported />
        </permissions>
    </portlet-resource>
</resource-action-mapping>

内容/语言.properties

action.ADD_SOMETHING=Add Something

portlet.xml

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
    <portlet>
        <portlet-name>1</portlet-name>
        <display-name>Sample Permissions</display-name>
        <portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
        <init-param>
            <name>view-template</name>
            <value>/view.jsp</value>
        </init-param>
        <expiration-cache>0</expiration-cache>
        <supports>
            <mime-type>text/html</mime-type>
        </supports>
        <resource-bundle>content.Language</resource-bundle>
        <portlet-info>
            <title>Sample Permissions</title>
            <short-title>Sample Permissions</short-title>
            <keywords>Sample Permissions</keywords>
        </portlet-info>
        <security-role-ref>
            <role-name>administrator</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>guest</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>power-user</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>user</role-name>
        </security-role-ref>
    </portlet>
</portlet-app>

liferay-portlet.xml

<liferay-portlet-app>
    <portlet>
        <portlet-name>1</portlet-name>
        <instanceable>true</instanceable>
    </portlet>
    <role-mapper>
        <role-name>administrator</role-name>
        <role-link>Administrator</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>guest</role-name>
        <role-link>Guest</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>power-user</role-name>
        <role-link>Power User</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>user</role-name>
        <role-link>User</role-link>
    </role-mapper>
</liferay-portlet-app>

liferay-display.xml

<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.2.0//EN" "http://www.liferay.com/dtd/liferay-display_6_2_0.dtd">

<display>
    <category name="category.sample">
        <portlet id="1" />
    </category>
</display>

liferay-plugin-package.properties

name=Sample Permissions
module-group-id=liferay
module-incremental-version=1
tags=sample
short-description=This plugin shows how to use the permission service from a portlet.
long-description=
change-log=
page-url=http://www.liferay.com
author=Liferay, Inc.
licenses=LGPL
liferay-versions=6.2.0+

portal-dependency-jars=\
    jstl-api.jar,\
    jstl-impl.jar

portal-dependency-tlds=\
    c.tld

web.xml

<?xml version="1.0"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <jsp-config>
        <taglib>
            <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
            <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
        </taglib>
    </jsp-config>
</web-app>

上面的代码完美运行,我可以在为角色定义权限中看到权限。

我正在寻找的是,如果我将 ADD_SOMETHING 操作修改为 ADD_SOMETHING_ELSE 或删除 ADD_SOMETHING 操作并添加新的操作键 MY_NEW_ACTION,ADD_SOMETHING 权限是否会从门户中完全删除?如果不是,我需要采取哪些步骤来删除 ADD_SOMETHING 权限?重新部署和重启服务器是否足以确保这些动作?

编辑:基于普拉卡什的回应

//Ashok - Beanshell Script for ResourceAction Table Service
import com.liferay.portal.model.ResourceAction;
import com.liferay.portal.service.ResourceActionLocalServiceUtil;
import java.util.List;

List resourceList=ResourceActionLocalServiceUtil.getResourceActions(com.liferay.portal.kernel.dao.orm.QueryUtil.ALL_POS, com.liferay.portal.kernel.dao.orm.QueryUtil.ALL_POS);

for (ResourceAction resourceAction:resourceList) {
    System.out.println("Resource Name: " + resourceAction.getActionId());
    System.out.println("Resource Name: " + resourceAction.getName());
   //ResourceActionLocalServiceUtil.deleteResourceAction(giveActionIdHereForDeleting);
}
4

1 回答 1

6

当您取消部署 portlet 或重新启动服务器时,不会从数据库中删除 portlet 的权限。为什么?

因为,取消部署 portlet 并不一定意味着需要从数据库中删除数据,所以可以多次重新部署 portlet。因此liferay正确地采取了保持数据完整的安全路线,除非通过数据库或通过某些服务手动删除它。并且权限被视为数据,就像您为自定义资产存储的数据一样。

ResourceAction因此,您可以通过创建一些服务或通过control PanelServer AdministrationScripting→中的 beanshell 脚本面板从表中删除权限Select Beanshell。您还需要注意 bitwiseValue 和ResourcePermission表中已设置的权限。

我建议重命名ResourceAction表中的权限而不是删除和添加新权限,这可能会变得复杂。

希望这可以帮助。

于 2013-10-23T09:14:15.030 回答