Liferay:Liferay的权限系统

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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值