`

Liferay:JSR Portlet Security(权限)

 
阅读更多

转自:http://blog.csdn.net/hantiannan/article/details/6741992

要在自己的portlet中客户化定义Liferay的权限的话,需要做四步工作。

1. 定义所有的资源和他们的权限。
2. 在权限系统中注册在第一步中定义的所有的资源。
3. 对资源分配必要的权限。
4. 在程序中需要使用资源的地方先判断权限。

 

下面以blog为例。

1. 首先是资源和权限的定义。参考/liferay-portal-src-6.0.X/portal-impl/src/resource-actions/blogs.xml文件。

<?xml version="1.0"?>

<resource-action-mapping>
    <portlet-resource>
        <portlet-name>33</portlet-name>
        <permissions>
            <supports>
                <action-key>ACCESS_IN_CONTROL_PANEL</action-key>
                <action-key>ADD_TO_PAGE</action-key>
                <action-key>CONFIGURATION</action-key>
                <action-key>VIEW</action-key>
            </supports>
            <community-defaults>
                <action-key>VIEW</action-key>
            </community-defaults>
            <guest-defaults>
                <action-key>VIEW</action-key>
            </guest-defaults>
            <guest-unsupported>
                <action-key>ACCESS_IN_CONTROL_PANEL</action-key>
                <action-key>CONFIGURATION</action-key>
            </guest-unsupported>
        </permissions>
    </portlet-resource>
    <model-resource>
        <model-name>com.liferay.portlet.blogs</model-name>
        <portlet-ref>
            <portlet-name>33</portlet-name>
        </portlet-ref>
        <permissions>
            <supports>
                <action-key>ADD_ENTRY</action-key>
                <action-key>PERMISSIONS</action-key>
                <action-key>SUBSCRIBE</action-key>
            </supports>
            <community-defaults />
            <guest-defaults />
            <guest-unsupported>
                <action-key>ADD_ENTRY</action-key>
                <action-key>PERMISSIONS</action-key>
                <action-key>SUBSCRIBE</action-key>
            </guest-unsupported>
        </permissions>
    </model-resource>
    <model-resource>
        <model-name>com.liferay.portlet.blogs.model.BlogsEntry</model-name>
        <portlet-ref>
            <portlet-name>33</portlet-name>
        </portlet-ref>
        <permissions>
            <supports>
                <action-key>ADD_DISCUSSION</action-key>
                <action-key>DELETE</action-key>
                <action-key>DELETE_DISCUSSION</action-key>
                <action-key>PERMISSIONS</action-key>
                <action-key>UPDATE</action-key>
                <action-key>UPDATE_DISCUSSION</action-key>
                <action-key>VIEW</action-key>
            </supports>
            <community-defaults>
                <action-key>ADD_DISCUSSION</action-key>
                <action-key>VIEW</action-key>
            </community-defaults>
            <guest-defaults>
                <action-key>VIEW</action-key>
            </guest-defaults>
            <guest-unsupported>
                <action-key>ADD_DISCUSSION</action-key>
                <action-key>DELETE</action-key>
                <action-key>DELETE_DISCUSSION</action-key>
                <action-key>PERMISSIONS</action-key>
                <action-key>UPDATE</action-key>
                <action-key>UPDATE_DISCUSSION</action-key>
            </guest-unsupported>
        </permissions>
        <social-equity>
            <social-equity-mapping>
                <action-key>ADD_DISCUSSION</action-key>
                <information-value>2</information-value>
                <information-lifespan>365</information-lifespan>
                <participation-value>2</participation-value>
                <participation-lifespan>365</participation-lifespan>
            </social-equity-mapping>
            <social-equity-mapping>
                <action-key>ADD_ENTRY</action-key>
                <information-value>10</information-value>
                <information-lifespan>365</information-lifespan>
                <participation-value>5</participation-value>
                <participation-lifespan>365</participation-lifespan>
            </social-equity-mapping>
            <social-equity-mapping>
                <action-key>VIEW</action-key>
                <information-value>1</information-value>
                <information-lifespan>365</information-lifespan>
                <participation-value>1</participation-value>
                <participation-lifespan>365</participation-lifespan>
            </social-equity-mapping>
        </social-equity>
    </model-resource>
</resource-action-mapping>

2. 把文件关联到系统

   这个文件中设置好支持的动作和不支持的等后,在/liferay-portal-src-6.0.X/portal-impl/src/resource-actions/default.xml把自己生成的文件加入。

<resource-action-mapping>
    <resource file="resource-actions/portal.xml" />
    <resource file="resource-actions/announcements.xml" />
    <resource file="resource-actions/asset.xml" />
    <resource file="resource-actions/blogs.xml" />
    //。。。。。
</resource-action-mapping>

 

3. 权限算法

liferay有6种权限算法。这个地方可以使用共通的默认处理。在客户化的过程不需做特别处理。

 

4.添加资源到数据库的方法

使用ResourceLocalServiceUtil类中的addResources方法来做这个工作。这个地方也是共通做的处理。

public void addResources(
  String companyId, String groupId, String userId, String name,
  String primKey, boolean portletActions,
  boolean addCommunityPermissions, boolean addGuestPermissions);

BlogsEntryLocalServiceImpl中的实际调用例:

ResourceLocalServiceUtil.addResources(
   entry.getCompanyId(), entry.getGroupId(), entry.getUserId(),
  BlogsEntry.class.getName(), entry.getEntryId(),
  false, addCommunityPermissions, addGuestPermissions);

 

5. 添加权限到数据库的方法

权限的添加方法是系统共通做的,在客户化portlet中不需要做任何处理。

 

6.设置权限的方法

比如要在自己的jsp画面加个链接设置做设置权限的处理的。可以参照下面的写法。

<liferay-security:permissionsURL
   modelResource="<%= BlogsEntry.class.getName() %>"
   modelResourceDescription="<%= entry.getTitle() %>"
   resourcePrimKey="<%= entry.getPrimaryKey().toString() %>"
   var="entryURL"
/>
<liferay-ui:icon image="permissions" url="<%= entryURL %>" />

 

7. 权限判断的使用

例:blog中有没有写文章的权限判断方法

if (!permissionChecker.hasPermission(scopeGroupId, “com.liferay.portlet.blogs.model”,scopeGroupId, ”ADD_ENTRY”)) {
    throw new PrincipalException();
}
blogsEntryLocalService.addEntry(...);

 

这样liferay的权限系统的东西就基本上了解了。对权限部分的改造很有帮助的。

分享到:
评论

相关推荐

    Inter-Portlet-Communication---Liferay:内部Portlet通信-Liferay中的示例Portlet

    Portlet之间的通信--- Liferay 内部Portlet通信-Liferay中的示例Portlet 示例:从Portlet A输入标题,并使用Portlet B在同一页面上显示标题。

    Liferay-Portlet-SDK5.2.3.rar_liferay_liferay sdk_portlet

    **Liferay Portlet SDK 5.2.3详解** Liferay Portlet SDK 是 Liferay Portal 平台的一个重要组成部分,它为开发者提供了构建、部署和管理portlet所需的所有工具和技术支持。Liferay Portlet SDK 5.2.3是该系列的一...

    Liferay跨页面Portlet之间的调用与数据传递.docx

    在Liferay中,跨页面Portlet之间的调用与数据传递是一项关键任务,因为这涉及到不同Portlet间的协作和信息共享。Liferay提供了多种通信机制,包括PortletSession、Public Render Parameters以及Portlet事件,但这些...

    liferay一个简单的portlet

    - **Portlet间通信**:通过JSR-286的`PortletSession`或Liferay的`Event`机制,实现不同Portlet间的协作。 - **RESTful服务**:创建Portlet API,以JSON或其他格式暴露数据,供其他应用或Portlets调用。 总之,理解...

    liferay-portlet-development-guide-4.3

    8. **Liferay服务和API**:了解Liferay提供的各种服务,如用户管理、角色权限、内容管理等,以及如何通过API集成这些服务到portlet中。 9. **portlet的国际化(i18n)**:学习如何使portlet支持多种语言,提供全球...

    Liferay portlet 工程示例代码

    Liferay Portal提供强大的角色和权限系统,开发者可以为portlet设置访问控制,如只允许特定用户组查看或操作。 9. **Internationalization (i18n)** Liferay支持多语言,portlet开发时应考虑国际化,通过资源文件...

    Liferay5.2.3 样例Portlet

    Liferay5.2.3的样例,通过war.bat打包后发布到相应的liferay环境即可。 另外,需要配置context,tomcat中的代码如下: &lt;/Context&gt;

    liferay portlet例子

    liferay portlet例子 liferay portlet例子

    liferay-spring-portlet

    【标题】"liferay-spring-portlet"是一个基于Spring框架构建的portlet应用,适用于Liferay门户平台。这个项目展示了如何将Spring与Liferay Portal结合,创建一个可直接部署到Liferay中的WAR包。作者提到他们已经花费...

    CAS, Liferay和Alfresco portlet三者的整合

    Liferay的特点在于其强大的portlet容器,portlet是一种可重用的Web组件,可以集成到门户页面中,为用户提供定制化的功能。 Alfresco则是一个强大的企业内容管理系统(Enterprise Content Management, ECM),它涵盖...

    liferay_portlet对象详解

    【Liferay Portlet 对象详解】 在 Liferay 平台中,Portlet 是核心组件,它负责呈现内容和提供互动功能。Portlet 技术的理解和应用是开发 Liferay 应用程序的关键。本文将深入解析 Portlet 的关键概念,包括 ...

    liferay-gis-portlet:GIS Portlet

    8. **安全与权限控制**:作为Liferay的一部分,GIS Portlet也继承了Liferay的权限管理系统,可以设置不同用户或用户组对地图数据的访问权限。 9. **可扩展性**:基于Java和Liferay的插件架构,GIS Portlet易于扩展...

    JSR168_Portlet开发入门

    1. Portlet:JSR-168中的核心组件,它是一个小型的Web应用程序,可以嵌入到门户页面中,提供特定的功能。Portlet可以处理HTTP请求,生成HTML响应,并且能够与其他portlet协同工作。 2. Portlet容器:执行portlet的...

    liferay portlet 开发实例

    在IT领域,特别是企业级应用开发中,Liferay作为一个强大的企业门户平台,提供了丰富的功能和服务,其中Liferay Portlet的开发是构建定制化企业应用的关键技术之一。本文将基于提供的文件信息,深入解析Liferay ...

    liferay-spring-mvc-portlet:Liferay Spring MVC portlet 的项目模板

    Liferay Spring Portlet MVC 使用 Maven 的 Liferay Spring Portlet MVC 项目模板。 Liferay EE 6.2.10.11 (GA1, SP710) Java 1.7 小门户 2.0 弹簧框架 4.1.5 基于注解的控制器配置 用法 $ git clone ...

    liferay portlet开发

    ### Liferay Portlet 开发详解 #### 一、概述 Liferay是一款开源的企业级内容管理系统(Content Management System, CMS),主要用于构建企业门户站点。在Liferay中,Portlet是一种用于显示内容和服务的应用程序组件...

    liferay-portlet-development

    Portlet遵循JSR 286标准,确保了跨平台的兼容性和可移植性。在Liferay中,portlet的开发极为灵活,支持Java、JavaScript等多种技术栈,满足多样化的开发需求。 ### 三、为何选择Liferay? Liferay作为一款成熟的...

    liferay portlet demo

    【标题】:“Liferay Portlet Demo” 在Liferay Portal中,Portlets是可重用的Web组件,它们为用户提供交互式功能。"Liferay Portlet Demo"是一个示例项目,旨在展示如何在Liferay环境中开发、部署和使用portlet。...

    liferay开发demo

    例如portlet生命周期、portlet渲染机制、portlet间通信(JSR-286的ResourceRequest和ResourceResponse)、portlet的缓存策略、portlet的国际化处理、portlet的安全性设置,以及如何使用Liferay的工作流API等。...

Global site tag (gtag.js) - Google Analytics