1

私はLiferay6.1CE、Tomcat、Vaadin 6.8.4を使用して
います。おそらく、私の側で非常に間違ったアプローチを使用しているか、明らかな何かを見逃している可能性があります。

ユーザーのクラッド機能を制御する必要があります。ユーザーが所属する組織とその下の子組織へのアクセスを許可します。(私はLiferayのorganization_テーブルを使用しています)

権限の管理を簡素化するために、階層内の組織にユーザーを割り当てることを望んでいました。次に、デフォルトの特権は、その組織と任意の親組織に割り当てられた役割から決定できます。これは通常の役割ではかなりうまく機能しているようですが、カスタムの組織の役割を試したところ、期待どおりに詳細を把握できませんでした。

  • ユーザーのコントロールパネル定義に正しいデータが表示されます。
    (Liferayは、カスタムの組織ロールを取得して表示する方法を知っています:-)

  • バックエンドテーブルに実際のデータ値が入力されているのを確認できますusergrouprole

  • デフォルトのsuperadmin/owner(test @ liferay)のこの役割を検出できます
    。。。しかし、他のユーザーの役割を検出できません:(

  • 私は運がなくても使ってきRoleLocalServiceUtilました。GroupLocalServiceUtil

    私の腸の感覚は、私の「純粋な」概念を放棄し、代わりに使い慣れたカスタムクエリにフォールバックするように言っていますが、他の誰かがより良い提案を持っているかどうかを最初に確認したいと思います。

    私は現在、Liferayコードにアクセスして関連するセグメントを見つける方法を知らないので、読み物がある場合はおそらくそれが選択肢になるかもしれません:)

    手がかり?

  • 4

    2 に答える 2

    1

    これは(そうであるため)醜く見えますが、電話する必要があると思います:

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

    一般的に言えば、XYZテーブルには(常にではないにしても)XYZLocalServiceUtilとXYZServiceUtilがあります。

    于 2012-10-30T22:55:13.113 に答える
    0

    共有の精神で、権限を表示するためのサンプルコードを次に示します。

    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

    ロビン

    于 2012-11-01T22:08:27.990 に答える