Inheritance 如何在Liferay 6.1中将站点角色权限从用户组继承到其成员?

Inheritance 如何在Liferay 6.1中将站点角色权限从用户组继承到其成员?,inheritance,liferay,liferay-6,user-permissions,Inheritance,Liferay,Liferay 6,User Permissions,我使用的是Liferay 6.1,我有一个名为MySite Approvers的用户组,并为其分配了站点角色site Approver,用于站点MySite 我希望属于此用户组的用户也将继承MySite的站点审批者角色,即继承此站点角色的权限 但用户不继承站点角色权限,在“控制面板”中MySite的站点成员身份中,用户的站点角色为空 我怎样才能修好它?我是否应该编写一个钩子,定期向具有站点角色的用户组成员添加站点角色?Liferay不会在员工角色配置文件中显示您的站点角色站点审批人,因为该角色不

我使用的是Liferay 6.1,我有一个名为MySite Approvers的用户组,并为其分配了站点角色site Approver,用于站点MySite

我希望属于此用户组的用户也将继承MySite的站点审批者角色,即继承此站点角色的权限

但用户不继承站点角色权限,在“控制面板”中MySite的站点成员身份中,用户的站点角色为空


我怎样才能修好它?我是否应该编写一个钩子,定期向具有站点角色的用户组成员添加站点角色?

Liferay不会在员工角色配置文件中显示您的站点角色站点审批人,因为该角色不与单个用户关联,而是分配给用户组

但是,只要用户是您的用户组MySite Approvers的成员,就应该授予该用户站点Approver中定义的权限

Liferay文档说明:

这是具有适当角色的门户用户查看内容和 决定拒绝它,将它移回开头或接受它 将其转换到下一步

因此,对于工作流来说,与用户建立直接的角色关联非常重要。不是与用户关联的某种权限


我想这就是功能设计的方式。在我看来,这并不是一个bug,因为工作流不需要任何权限,而是希望用户成为角色的成员。

我遇到了类似的问题,试图通过每个注册的门户用户继承组织角色。经过大量测试后,我意识到只有常规角色才会得到传播,并且在PermissionChecker和RoleLocalServiceUtil中的行为符合预期

如果尝试创建常规角色而不是站点角色,则可以将该角色分配给用户、用户组、组织或站点 我还没有找到关于常规角色、组织角色和站点角色之间区别的完整文档,但我得到的印象是,例如,站点角色不是您将分配给站点所有用户的角色

更新:我打开了liferay 6.1.0的源代码,在 RoleLocalServiceUtil.hasUserRole

注意常规角色


现在我没有时间检查所有对该函数的引用,但对我来说,这清楚地表明Liferay的角色/权限检查机制可能不适用于任何角色类型,为了通过用户组将用户的个人成员身份从用户的成员身份分离到站点角色。但对于用户未授予的权限,例如,我使用SiteApprover角色定义了approver工作流。这不考虑用户组对站点角色的成员身份。可能这只是工作流模块的一个bug而已。我还可以进一步测试其他权限,以查看它们是否尊重从用户组继承的角色。根据上述注释更新了上面的答案。但用户通过用户对与站点角色关联的用户组的成员身份间接成为角色站点审批者的成员。我认为从LDAP导入用户和用户组以及将用户组关联到站点角色应该在所有情况下都能无缝工作,即使是工作流,也不需要手动将每个用户关联到站点角色。如果这适用于其余的授权机制案例,我希望也适用于工作流。不幸的是,它似乎不是这样工作的。您也可以在liferay论坛中对不同的视图进行查询。我认为这是一个错误,因为即使工作流希望用户成为角色的成员,也应该检查间接成员身份。否则,LDAP导入的用户组和站点角色功能无法自动工作,管理员不必直接将站点角色重新分配给特定用户。您介意使用常规角色而不是站点角色吗?@yannicuLar是的,我需要站点角色功能而不是常规角色。将用户分配给MySite Approvers组应为特定站点的用户提供站点Approver功能。站点Approver是您创建的自定义站点角色,对吗?对,它是自定义站点角色。Μαρα,您确定不能使用常规角色吗?您可以将站点审批者角色移植到常规角色,并将其分配给MySite Approvers用户组。我认为这对您来说应该很好。其他两种角色的名称分别表示组织和站点范围。我认为他们权限的范围很好,在某些情况下似乎不起作用的是将权限从用户组的站点角色权限传播到其成员。对于门户范围的权限,我也使用了常规角色,但对于特定于站点的权限,我还需要站点角色。正如我在每个站点的LDAP用户组中所做的那样,我想说的是,站点和组织角色不能像t
继承人的名字表明。考虑一下:您可以将站点分配给常规角色,但不能为站点角色选择站点。在Liferay 6.1中,您可以为用户将站点角色分配给站点。这不是一个常规角色。常规角色是门户范围的角色。这工作正常。似乎不起作用的是,当将站点角色分配给用户组时,并且此站点角色是工作流配置的一部分,权限不会传播。在您的情况下,用户组到站点角色的分配似乎不会传播。我理解你的观点,但恐怕我不能在这方面提出一个“干净”的解决方案,除了做一些变通办法,明白吗。然后,我将尝试使用一个钩子来修复它,定期向具有站点角色的用户组成员添加站点角色。谢谢你的建议。
/**
* Returns <code>true</code> if the user is associated with the named
* regular role.
*
* @param userId the primary key of the user
* @param companyId the primary key of the company
* @param name the name of the role
* @param inherited whether to include the user's inherited roles in the
search
* @return <code>true</code> if the user is associated with the regular
role; <code>false</code> otherwise
* @throws PortalException if a role with the name could not be found in the
company or if a default user for the company could not be found
* @throws SystemException if a system exception occurred
*/
public static boolean hasUserRole(long userId, long companyId,
    java.lang.String name, boolean inherited)
    throws com.liferay.portal.kernel.exception.PortalException,
        com.liferay.portal.kernel.exception.SystemException {
    return getService().hasUserRole(userId, companyId, name, inherited);
}