当前位置: 首页 > 知识库问答 >
问题:

访问Liferay 6.1自定义/继承的组织角色

姜德泽
2023-03-14

我正在使用Liferay 6.1 CE、Tomcat、Vaadin 6.8.4,这可能是我的错误做法,也可能是我遗漏了一些明显的东西

我需要为我的用户控制crud功能-允许访问他们所属的组织和低于该组织的任何子组织。(我正在使用Liferay的组织表)

在尝试简化权限管理时,我曾希望将用户分配给层次结构中的组织。然后可以根据分配给该组织和任何父组织的角色来确定默认权限。这似乎对常规角色很有效——但后来我尝试了自定义组织角色,但我无法按预期掌握详细信息。

我的直觉告诉我,放弃我的“纯粹主义”概念,转而使用熟悉的自定义查询,但我想先看看是否还有其他人有更好的建议。

我目前不知道如何进入Liferay代码以找到相关的片段,因此如果您有一些阅读材料,这可能是一种选择:)

线索?

共有2个答案

酆英达
2023-03-14

本着共享的精神,这里有一些示例代码来显示权限。

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
User i_user =  themeDisplay.getUser();
PortletDisplay portDisplay = themeDisplay.getPortletDisplay();
String myRootname = portDisplay.getRootPortletId();
String strOrgGroupRoles = "";

//== 1. Display permission provided to user by Organisation(Group) Roles
//== 2. User is assigned to the org.
//== 3. Org is a member of the OrgRole.
//== 4. OrgRole has permission defined from current selected portlet permissions (action-key)
List<UserGroupRole> ugRoles = new ArrayList<UserGroupRole>();
ugRoles.addAll(UserGroupRoleLocalServiceUtil.getUserGroupRoles(i_user.getUserId() ) );
for (UserGroupRole ugRole : ugRoles){

    //== For each role this user has allocated, display the Rolename and the Organisation
    strOrgGroupRoles += "'" +ugRole.getRole().getName() + "'  (roleId="+ugRole.getRoleId()+")";
    strOrgGroupRoles += " for organization '"+OrganizationLocalServiceUtil.getOrganization(ugRole.getGroup().getClassPK()).getName();
    strOrgGroupRoles += "' (groupId=" +ugRole.getGroupId()+ ")\n";

    //== Permissions for the role is harder to find - linked to a resource
    //== Data shows the `actionId` equates to relative action number column 'bitwiseValue' in `resourceaction`.
    //== Snag is ResourcePermission needs a tie-breaker of the portlet name, not just the roleId
    //== Get this from ThemeDisplay getRootPortletId()
    //==
    //== I think Liferay 6.1.0 API may be broken here:  ResourceActionLocalServiceUtil.getResourceAction expects String, String . . .
    //==  . . . yet the `bitwiseValue` column is BIGINT(20) so nothing is returned.
    //== This causes us to attack it from a different angle
    List<ResourcePermission> resourcePerms = new ArrayList<ResourcePermission>();
    resourcePerms.addAll( ResourcePermissionLocalServiceUtil.getRoleResourcePermissions(ugRole.getRoleId()) );
    for (ResourcePermission resourcePerm : resourcePerms){

        //== For each of the ResourcePermissions of this role, get the actionId (equals Role Permissions aka action-key)
        //== The link is a relative number, not unique in this table so ensure it is for this portlet only
        if ( resourcePerm.getName().equals(myRootname)){ 
            List<ResourceAction> resourceActions = new ArrayList<ResourceAction>();
            resourceActions.addAll( ResourceActionLocalServiceUtil.getResourceActions(myRootname)  );
            for (ResourceAction resourceAction : resourceActions) {

                //== For each listed action, ensure it is the relative action number we want (actionId) 
                if (resourceAction.getBitwiseValue() == resourcePerm.getActionIds() ) {
                    strOrgGroupRoles += " +-- action= " + resourceAction.getActionId() + "\n";
                }   

            }   //== End of actionIds for this portlet

        }   //== End if this portlet only

    }   //== End ResourcePermissions for this role

}   //== End roles for this user                

HTH公司

罗宾

宓毅庵
2023-03-14

这看起来很难看(因为确实如此),但我想你需要打电话:

UserGroupRoleLocalServiceUtil.hasUserGroupRole(long userId, long groupId, long roleId);

一般来说,XYZ表有(如果不总是)一个XYZLocalServiceUtil和XYZServiceUtil。

 类似资料:
  • 本文向大家介绍ABAP 继承-定义,包括了ABAP 继承-定义的使用技巧和注意事项,需要的朋友参考一下 示例 信息 继承使您可以从现有类派生新类。您可以使用的INHERITING FROM加法 从超类继承的CLASS子类DEFINITION 继承 。 声明。新的类子类继承了现有类超类的所有组件。新类称为派生类的子类。原始类称为新类的超类。一个类可以有多个直接子类,但可能只有一个直接超类。 类的实现

  • 7.3 自定义类的组织管理 在上一节已经讲叙了如何利用 VimL 语法实现面向对象编程的基本原理,本节进一步讨论 在实践中如何更好地使用 VimL 面向对象编程。关键是如何定义类与使用类,如何管理与 组织类代码使之更整洁。因为从某种意义讲,面向对象并不是什么新的编程技术,而是抽 象思考问题的哲学,以及代码管理的方法论。 笔者在 github 托管了一个有关 VimL 面向对象编程的项目 vimlo

  • 我正在进行的项目使用的是JavaFx框架,因此我们使用的是fxml文件和场景构建器。我已经为我们的应用程序制作了一个自定义控件,根据我在web上找到的示例,它工作得非常好。但是,我们将有多个带有公共基本功能的自定义控件。因此,我想将基本功能继承到一个自定义控件中。 我正在尝试做的是创建一个扩展自定义根控件类的自定义控件。CustomControl.fxml文件如下所示: 它是皮包骨头,当我打开Cu

  • 问题内容: 我有一个自定义组件,其中包含两个具有自定义尺寸设置方法的TextView(两个文本视图的比例大约为1:2)。由于这是RelativeLayout的子类,因此它没有textSize属性,但是我想知道是否仍然可以在XML实例中为此组件设置属性,然后从AttributeSet中获取要使用的属性与我在构造函数中的自定义方法。 我已经看到了使用自定义属性执行此操作的技术,但是如果我想获取Andr

  • 我似乎找不到有关自定义异常类的太多信息。 我所知道的 您可以声明您的自定义错误类并让它从继承,因此可以是d: 这允许您使用以下方法提升它: 稍后,在救援时获取该消息 我不知道的是 我想给我的异常提供一些自定义字段,但我想从父类继承<code>消息@message不是exception类的实例变量,因此我担心我的继承将不起作用。 有人能告诉我更多细节吗?如何使用<code>对象 然后: 得到: 它会

  • 我创建了一个自定义IntegerRapper类来实现一个属性提取器方法,如下所示: 我还创建了一个名为“PortCell”的类,它扩展了ListCell以设计我喜欢的单元格,如下所示: 当用户右键单击ListView中的端口号并单击“开始监听”时,我希望红十字会变成一个绿色的勾号,这一切正常,但当我移除带有绿色勾号的端口上方的端口时,绿色勾号下方显示的端口似乎继承了勾号?绿色勾号仅在传递给upda