2
1
0

特定のグループにだけ必要な情報を記載した箇所があり、そのグループ以外には邪魔なので非表示にしたいと思って、以下のようなユーザマクロを作ってみたのですが、どうにも判断してくれません。

Currentユーザが特定グループに属しているか、どう判断すればよいのですか?

## Macro has a body: Y
## @param ShowGroup:title=表示するグループ|type=string|required=true|desc=ここで設定したグループにのみ表示

#set ($chkUser=$action.remoteUser.name )
#set ($flg="false" )

#foreach($user in $userAccessor.getMembers($userAccessor.getGroup($paramShowGroup)))
    #if($chkUser == $user.getFullName())
        #set ($flg="true" )
        #break
    #end
#end

#if($flg == "true")
    <script type="text/javascript">
        AJS.toInit(function(){
          AJS.$('div#hide-box-macro').hide();
        });
    </script>
#end

<div id="hide-box-macro">$body</div>
  1. RYOITO
    載せたコードおかしいですね。
    テスト時色々条件変えていて、戻し忘れました。
    #if($flg == "false")ですね…
Commentコメントを追加...

1 回答

  1.  
    3
    2
    1

    https://docs.atlassian.com/atlassian-user/2.0/apidocs/com/atlassian/user/GroupManager.html

    より。groupManagerでユーザーが実際にそのグループに所属しているかチェックしたほうが効率がいいかと。

    以下のような形ですかね。

    何かチェックボックス等で表示・非表示をコントロールする必要がなければ、JavaScriptでの対応も必要ないかと思いますよ。

    ## Macro has a body: Y
    ## @param ShowGroup:title=表示するグループ|type=string|required=true|desc=ここで設定したグループにのみ表示
    #set($containerManagerClass = $content.class.forName('com.atlassian.spring.container.ContainerManager'))
    #set($getInstanceMethod = $containerManagerClass.getDeclaredMethod('getInstance',null))
    #set($containerManager = $getInstanceMethod.invoke(null,null))
    #set($containerContext = $containerManager.containerContext)
    #set($groupManager = $containerContext.getComponent('groupManager'))
    
    
    #set($user = $userAccessor.getUser($action.remoteUser.name))
    #set($group = $groupManager.getGroup($paramShowGroup))
    
    
    #if ($user && $group && $groupManager.hasMembership($group, $user))
    <div id="hide-box-macro">$body</div>
    #end
    
    

    関連アドオン

     

    1. RYOITO

      ありがとうございます。

      hasMembership()いい感じですね。

      そうでした。確かにそもそもHTML化も要らないですね。

       

      私のテスト環境で$groupManagerを使うと怒られたので、以下に収まりました。

      ## Macro has a body: Y
      ## @param ShowGroup:title=表示するグループ|type=string|required=true|desc=ここで設定したグループにのみ表示
      
      #set($user = $userAccessor.getUser($action.remoteUser.name))
      #set($group = $userAccessor.getGroup($paramShowGroup))
      
      #if ($user && $group && $userAccessor.hasMembership($group, $user))
        <div>$body</div>
      #end
    2. Kengo Ohsaki

      userAccessor だけでいけましたね。失礼しました。よかったです。

    Commentコメントを追加...