Удаление пользовательских разрешений / действий из портлета

Мне удалось определить пользовательские действия / разрешения портлета на основе этого примера в SDK Liferay Plugins

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

Я хочу знать необходимые шаги, которые нужно предпринять, чтобы удалить пользовательские действия / разрешения портлета (не разрешения модели) из портлета.

Я помню, как наблюдал, что при повторном развертывании портлета с измененными настраиваемыми действиями / разрешениями старые настраиваемые действия / разрешения сохраняются.

Я попытался удалить папку портлета из веб-приложений Tomcat, и она была успешно незарегистрирована. Но после того, как я снова разверну портлет с удаленными пользовательскими действиями / разрешениями из соответствующего XML, я все равно смогу увидеть разрешения в Определении разрешений роли.

Я попытался очистить настройки разрешений в панели управления сервером панели управления Liferay, но это ничего не изменило (не предполагалось).

После повторного развертывания портлета с удаленными / измененными разрешениями и перезапуска сервера я по-прежнему вижу настраиваемые действия / разрешения, назначенные портлету, но когда я выбираю портлет, то не вижу удаленных разрешений, которые я необходимость.

Удаляет ли неразвертывание портлета все связанные пользовательские действия / разрешения из Liferay Portal и базы данных портала? Или мне для этого нужно совершать отдельные звонки в Liferay Service? Любые вклады в этом отношении действительно приветствуются.

Версия 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>

содержание / language.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);
}

1 ответ

Решение

Разрешения не удаляются из базы данных для портлета ни при развертывании портлета, ни при перезапуске сервера. Зачем?

Поскольку удаление портлета не обязательно означает, что данные должны быть удалены из базы данных, портлет может быть повторно развернут много раз. Таким образом, liferay правильно выбирает безопасный путь сохранения данных в целости, если только они не удаляются вручную через базу данных или какой-либо сервис. И разрешения рассматриваются как данные, так же как у вас есть данные, хранящиеся для вашего пользовательского актива.

Таким образом, вы можете удалить разрешения из ResourceAction таблицу, создав какую-либо службу или через панель сценариев Beanhell в панели управленияАдминистрирование сервераСценарииВыбрать Beanshell. Вам также необходимо позаботиться о bitwiseValue и разрешениях, уже установленных в ResourcePermission Таблица.

Я бы предложил переименовать разрешение в ResourceAction Таблица, а не удаление и добавление новой, может оказаться сложной.

Надеюсь это поможет.

Другие вопросы по тегам