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