`

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的权限系统的东西就基本上了解了。对权限部分的改造很有帮助的。

分享到:
评论

相关推荐

    Portlet插件开发说明文档

    1. **portlet.xml**:JSR-286标准的portlet配置文件。它包含了portlet的基本信息,如名称、显示名称、类名等。 2. **liferay-display.xml**:Liferay特有的配置文件,用于描述portlet在添加应用时将展示的位置或...

    liferay集成struts2

    - `&lt;portlet-name&gt;`:定义Portlet的名称,此名称用于在Liferay中识别该Portlet。 - `&lt;display-name&gt;`:Portlet的显示名称,用于用户界面展示。 - `&lt;portlet-class&gt;`:指定Portlet类的全限定名。在这里使用了...

    Portlet开发技术解决方案.pdf

    Liferay Portal就是一个100%支持JSR-168规范的Portlet容器示例。 ##### 2.2 Portal概述 - **Portal Server定义**:Portal Server指的是一个Web-based系统,它提供了个性化设置、单点登录等功能,并能够整合来自不...

    liferay development 中文

    6. **安全性与权限管理**:Liferay的安全模型基于Spring Security,提供角色、组、组织结构的精细权限控制。开发者需要理解如何设置和管理权限,以确保门户内容和功能的安全访问。 7. **国际化与本地化**:Liferay...

    liferay-demo:Liferay示范

    总的来说,"liferay-demo"项目是一个全面学习Liferay开发的起点,涵盖了从基础的portlet开发到复杂的主题定制和权限管理等多个方面。通过深入研究和实践这个示例,开发者可以快速掌握Liferay平台的使用和开发技巧,...

    index-database-portlet

    8. **安全与权限管理**:考虑到企业应用的复杂性,portlet可能集成了Spring Security或类似的框架,以处理用户认证和授权。 9. **Ajax技术**:为了提供更好的用户体验,portlet可能使用Ajax异步更新技术,使得用户...

    JetSpeed2开发文档的中文翻译

    这些功能通常是通过组件框架(比如Spring Security)或者集成的Portlet容器(如Pluto)提供的API来实现。 #### JetSpeed2的PortalBridge集成 J2支持多种类型的应用程序集成,包括Struts MVC、WebWork、JSP、Perl和...

    ibm websphere portal 学习资料

    2. **portlet 开发**:学习使用Java Portlet API、JSR 286 和Liferay Portlet API开发portlet。 3. **工作流与协作**:了解如何在门户中实现工作流程和协作功能,如任务分配、文件共享等。 4. **主题与外观**:...

    netbsd下安装jetspeed2.2.1记录(一)

    Jetspeed 2是一个基于Java的portlet容器,它支持JSR-168和JSR-286 Portlet规范。这使得Jetspeed能够与多种portlet应用程序集成,如Liferay、Plone等。版本2.2.1是Jetspeed的一个稳定版本,提供了许多改进和新特性,...

Global site tag (gtag.js) - Google Analytics