liferay权限之二 permissionChecker的实现解析

版本:4.3.4企业版

1.用户所关联实体(社区、组织、用户组、角色、及他们之间的关联体):

com.liferay.portal.service.persistence.GroupFinder.countByGroupId:

SELECT
                COUNT(*) AS COUNT_VALUE
            FROM
                Group_
             INNER JOIN
                Users_Groups ON
                    (Users_Groups.userId = ?)
            WHERE
                (Group_.liveGroupId = 0) AND
                (Users_Groups.groupId = Group_.groupId)
                (Group_.groupId = ?) AND
                (Group_.liveGroupId = 0)

 

2.资源及权限查找:

资源有四种范围:

对于范围是4的资源,资源的primky是业务对象的id

对于范围是2的资源,资源的primky是权限验证相关的groupid,一般是社区

对于范围是3的资源,资源的primky是GroupImpl.DEFAULT_PARENT_GROUP_ID,即0

对于范围是3的资源,资源的primky是companyId公司id

所以要查找四个范围的资源

3.权限验证:

以下是liferay默认的用户权限运算规则要权限检查的对象,对应的表很好找,使用customersql的方式查询

com.liferay.portal.service.persistence.PermissionFinder.countByGroupsRoles:

com.liferay.portal.service.persistence.PermissionFinder.countByGroupsPermissions:

com.liferay.portal.service.persistence.PermissionFinder.countByUsersRoles:

com.liferay.portal.service.persistence.PermissionFinder.countByUserGroupRole:

com.liferay.portal.service.persistence.PermissionFinder.countByUsersPermissions:

SELECT
                COUNT(*) AS COUNT_VALUE
            FROM
                Groups_Roles
            INNER JOIN
                Roles_Permissions ON
                    (Roles_Permissions.roleId = Groups_Roles.roleId)
            INNER JOIN
                Permission_ ON
                    (Permission_.permissionId = Roles_Permissions.permissionId)
            WHERE
                (Roles_Permissions.permissionId=?) AND
                (Groups_Roles.groupId=?)

Union all(

SELECT
                COUNT(*) AS COUNT_VALUE
            FROM
                Permission_
            INNER JOIN
                Groups_Permissions ON
                    (Groups_Permissions.permissionId = Permission_.permissionId)
            WHERE
                (Groups_Permissions.permissionId=?) AND
                (Groups_Permissions.groupId=?)

)

union all(

SELECT
                COUNT(*) AS COUNT_VALUE
            FROM
                Users_Roles
            INNER JOIN
                Roles_Permissions ON
                    (Roles_Permissions.roleId = Users_Roles.roleId)
            INNER JOIN
                Permission_ ON
                    (Permission_.permissionId = Roles_Permissions.permissionId)
            WHERE
                (Roles_Permissions.permissionId=?) AND
                (Users_Roles.userId = ?)

)

union all(

SELECT
                COUNT(*) AS COUNT_VALUE
            FROM
                UserGroupRole
            INNER JOIN
                Roles_Permissions ON
                    (Roles_Permissions.roleId = UserGroupRole.roleId and UserGroupRole.groupId = ?)
            INNER JOIN
                Permission_ ON
                    (Permission_.permissionId = Roles_Permissions.permissionId)
            WHERE
                (Roles_Permissions.permissionId=?) AND
                (UserGroupRole.userId = ?)

)

union all(

SELECT
                COUNT(*) AS COUNT_VALUE
            FROM
                Permission_
            INNER JOIN
                Users_Permissions ON
                    (Users_Permissions.permissionId = Permission_.permissionId)
            WHERE
                (Users_Permissions.permissionId=?) AND
                (Users_Permissions.userId = ?)

)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值