liferay2.6下的权限体系以及权限处理方法

 liferay里面所有的东西都被视为资源,权限和资源挂钩主要涉及到2个表:
     1、resourcepermission:资源权限表,此表定义了liferay里面的权限结构,表结构主要的字段如下:
         name:资源对象的描述,如果资源描述的是一个portlet对象,则为这个portlet对象的portletId。如果是一个class,则为带包名的class全                                 
               称;
         scope:权限的作用域,值有1、2、3、4;
                 1代表company级,就是实例;
                 2代表group级,就是站点级;
                 3代表站点模板;
                 4是没有级别,就是当前的。
         primkey:资源的id
         roleid:角色id
         ownerid:资源属于哪一个人,一般值为0或者创建用户的id;
         actionids:这里的actionids为resourceaction表里面的bitwisevalue的值想加之和;
    2、resourceaction:资源动作表,此表定义了liferay中的相应资源上可执行的动作有哪些,表结构主要字段如下:
         name:定义可资源的类型,同上面的表一样,确定资源是portlet还是实体或者其他,表示是什么资源;
         actionid:可执行的动作名称,这里主要是为我们的动作起一个名字,如添加,查看等;
         bitwisevalue:这个定义为上面可执行动作的位值,也可以看做权限动作的id;
    所以我们如果要判断bitwisevalue的值是否在actionids里面,只需要2个做位与算,actionids|bitwisevalue是否等于bitwisevalue即可。
    
liferay中的权限判断方法和获取、修改方法:
    liferay提供了现有的权限处理方法类ResourcePermissionLocalServiceUtil,下面介绍一下这个类的一些权限方法:
        1、权限判断方法:hasResourcePermission(companyId, name, scope, primKey, roleId, actionId)
                companyId = com.liferay.portal.util.PortalUtil.getDefaultCompanyId();
                role = com.liferay.portal.service.RoleLocalServiceUtil.getRole(companyId, "Site Member");
 
                // some layout plid
                layoutPlid = 10174;
                name = "com.liferay.portal.model.Layout";
                roleId = role.getRoleId();
                actionId = "VIEW";
 
                primKey = layoutPlid;
                scope = com.liferay.portal.model.ResourceConstants.SCOPE_INDIVIDUAL;
                hasIndividualPermission = com.liferay.portal.service.ResourcePermissionLocalServiceUtil.hasResourcePermission(companyId, name, scope, primKey, roleId, actionId);
 
         2、修改权限方法:updateResourcePermission(ResourcePermission perm)
                long companyId = themeDisplay.getCompanyId();
                Role role = com.liferay.portal.service.RoleLocalServiceUtil.getRole(companyId, "Owner");
                String name = DLFolder.class.getName();
                long primKey = savedFolder.getFolderId();
                int scope = com.liferay.portal.model.ResourceConstants.SCOPE_INDIVIDUAL;
 
                ResourcePermission perm = ResourcePermissionLocalServiceUtil.getResourcePermission(companyId, name, scope, String.valueOf(primKey), role.getRoleId());
                perm.removeResourceAction("VIEW");
                ResourcePermissionLocalServiceUtil.updateResourcePermission(perm);

猜你喜欢

转载自blog.csdn.net/u010634127/article/details/80609464