2013-10-23 39 views
3

我已经能够定义基于这个例子中Liferay的插件SDK自定义portlet操作/权限删除自定义权限/从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> 

内容/ 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); 
} 

回答

6

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

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

所以,你可以通过创建一些服务或通过控制面板中的BeanShell的脚本面板服务器管理脚本选择的BeanShell删除ResourceAction表的权限。您还需要注意已在ResourcePermission表中设置的bitwiseValue和权限。

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

希望这会有所帮助。

+0

正是我在找的东西。谢谢@Prakash –

+0

我在数据库中运行以下SQL: update resourceaction set name ='myportlet_WAR_mywar_old'where name ='myportlet_WAR_mywar'; 并重新启动Liferay。这工作。 – martsraits