转自: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的权限系统的东西就基本上了解了。对权限部分的改造很有帮助的。
相关推荐
1. **portlet.xml**:JSR-286标准的portlet配置文件。它包含了portlet的基本信息,如名称、显示名称、类名等。 2. **liferay-display.xml**:Liferay特有的配置文件,用于描述portlet在添加应用时将展示的位置或...
- `<portlet-name>`:定义Portlet的名称,此名称用于在Liferay中识别该Portlet。 - `<display-name>`:Portlet的显示名称,用于用户界面展示。 - `<portlet-class>`:指定Portlet类的全限定名。在这里使用了...
Liferay Portal就是一个100%支持JSR-168规范的Portlet容器示例。 ##### 2.2 Portal概述 - **Portal Server定义**:Portal Server指的是一个Web-based系统,它提供了个性化设置、单点登录等功能,并能够整合来自不...
6. **安全性与权限管理**:Liferay的安全模型基于Spring Security,提供角色、组、组织结构的精细权限控制。开发者需要理解如何设置和管理权限,以确保门户内容和功能的安全访问。 7. **国际化与本地化**:Liferay...
总的来说,"liferay-demo"项目是一个全面学习Liferay开发的起点,涵盖了从基础的portlet开发到复杂的主题定制和权限管理等多个方面。通过深入研究和实践这个示例,开发者可以快速掌握Liferay平台的使用和开发技巧,...
8. **安全与权限管理**:考虑到企业应用的复杂性,portlet可能集成了Spring Security或类似的框架,以处理用户认证和授权。 9. **Ajax技术**:为了提供更好的用户体验,portlet可能使用Ajax异步更新技术,使得用户...
这些功能通常是通过组件框架(比如Spring Security)或者集成的Portlet容器(如Pluto)提供的API来实现。 #### JetSpeed2的PortalBridge集成 J2支持多种类型的应用程序集成,包括Struts MVC、WebWork、JSP、Perl和...
2. **portlet 开发**:学习使用Java Portlet API、JSR 286 和Liferay Portlet API开发portlet。 3. **工作流与协作**:了解如何在门户中实现工作流程和协作功能,如任务分配、文件共享等。 4. **主题与外观**:...
Jetspeed 2是一个基于Java的portlet容器,它支持JSR-168和JSR-286 Portlet规范。这使得Jetspeed能够与多种portlet应用程序集成,如Liferay、Plone等。版本2.2.1是Jetspeed的一个稳定版本,提供了许多改进和新特性,...