legacy-knowledge-base
公開されました Jun. 30, 2025

RoleLocalServiceUtil.addRoleは、メインインスタンスにロールを作成します。

written-by

Sorin Pop

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • スクリプト・コンソールを使用してロールを作成しようとしています。 私たちがこれを正しく行っていないか、何かが正しく機能していないかのどちらかだ。

    ロールを作成する際には、RoleLocalServiceUtil.addRoleを使用し、インスタンスのcompanyIdが設定されたServiceContextオブジェクトを渡します。 しかし、ロールはserviceContextに設定されたcompanyIdに対応するインスタンスではなく、メインのインスタンスに作成される。

  • 再現の手順

    1. Liferay-2023.Q3.2
    2.を解凍します。
    3. バーチャルホスト foo.localhost.com
    4. 新しいインスタンスが取得したcompanyIdを確認する - 例えば12345
    5. foo.localhost.comをhostsファイルに追加する
    6. メインインスタンスで、コントロールパネル -> サーバー管理 -> スクリプト
    7. 添付のGroovyスクリプトを実行する(Config.companyIdをインスタンスの会社IDに交換する)。

    実際の結果
    ロール "Foo1 "と "Foo2 "はメイン・インスタンスに作成されますが、companyId 12345を持つインスタンスには作成されません。

    期待される結果
    ロール "Foo1 "と "Foo2 "がcompanyId 12345のインスタンスに作成されます。

環境

  • 7.4
  • 2023.q3.2

解像度

  • その原因は、addRoles() メソッドに渡す userId で、最終的に RoleLocalServiceUtil.addRole() API 呼び出しに渡されます。

    userId は次のようにして取得します:

    long currentUserId = Long.parseLong(userInfo.get("liferay.user.id"))

    そして、メインインスタンスに接続した状態で(そのインスタンスのユーザで)スクリプトを実行しているので、これはメインインスタンスに属する userId を返すことになり、そのような userId でロール作成メソッドを呼び出します。
  • つまり、あるインスタンスで、別のインスタンスのユーザーIDを使ってロールを作成したいのですが、おそらくこれがこの動作につながるのでしょう。
  • ロールを作成したいインスタンスのユーザに属する適切なuserIDを渡すようにすることをお勧めします。 これは期待通りの結果をもたらすことが確認されている。

did-this-article-resolve-your-issue

legacy-knowledge-base