1
0
-1

Confluence のユーザメニューを非表示にしたい

上記の内容に関係しているのですが、スペースごとに特定のユーザーのみユーザーメニューを非表示にする方法はありますでしょうか?

    Commentコメントを追加...

    1 回答

    1.  
      2
      1
      0

      スペースとユーザのマッピングが少し大変になりそうですが...

      カスタム HTML から以下の内容を挿入してうまくいったように思えます。

      <script>
      // ユーザーメニューを制限するスペースとグループをマッピング
      var restrictSpaces = {
        ConfirmSpace: ['confluence-users', 'confluence-users2'],
        ConfirmSpace2: ['confluence-user2']
      };
      
      var contextPath = Confluence.getContextPath();
      var userName = AJS.Meta.get('remote-user');
      var currentSpaceName = AJS.Meta.get('space-name');
      
      
      // ユーザーメニューを非表示にする CSS を作成
      var hideUserMenuCSS = document.createElement('style');
      hideUserMenuCSS.textContent = '#user-menu-link-content { display: none; } #user-menu-link:hover { cursor: initial; background-color: initial !important; }';
      
      // Current User が所属するグループを取得
      function getMemberOf() {
        var xhr = new XMLHttpRequest();
        
        xhr.onload = function() {
          if (xhr.status === 200) {
            setHideUserMenu(xhr.response.results);
          }
        }
        
        xhr.open('GET', contextPath + '/rest/api/user/memberof?username=' + userName);
        xhr.responseType = 'json';
        xhr.send();
      }
      
      // ユーザーメニューの非表示を実行
      function setHideUserMenu(userGroups) {
        if (isRestrictMember(userGroups)) {
          document.head.appendChild(hideUserMenuCSS);
        }
      }
      
      // ユーザーメニューを非表示にするか判定
      function isRestrictMember(userGroups) {
        for (var restrictSpace in restrictSpaces) {
          if (restrictSpace === currentSpaceName) {
            for (var i = 0, len = restrictSpaces[restrictSpace].length; i < len; i++) {
              for (var j = 0, len2 = userGroups.length; j < len2; j++) {
                if (restrictSpaces[restrictSpace][i] === userGroups[j].name) {
                  return true;
                }
              }
            }
          }
        }
        return false;
      }
      
      getMemberOf();
      </script>

      先頭の restrictSpaces
      スペースとユーザーグループをマッピングしているので、置き換えてください。

      1. sugiyama yukari

        ご回答ありがとうございます!

        カスタムHTMLを利用する場合はこちらの方法でできそうなことがわかりましたが、今後対象のスペースが増えていく事も考えて各スペースのスペースツール内のスタイルシートでも対応できないかと考えております。

        もしご存知でしたらご教授願えればと思います。

      2. Shuzaburo Doba

        スペースごとに設定してよいのでしたら、
        レイアウト から設定できると思います。

        スペースツール > ルックアンドフィール > レイアウト

        からメインレイアウトを編集し、
        以下のようにすると実現できたように思えます。

        #httpStatsElapse('mainDecoratorStart')
        <!DOCTYPE html>
        <html>
        <head>
        
        
        #####################################################
        ## スペースごとにユーザによってユーザメニューを非表示にする
        ## ここから...
        #####################################################
        #set ($restrictGroups = ["confluence-users", "confluence-users2"])
        #set ($currentUser = $action.authenticatedUser)
        #set ($userGroups = $userAccessor.getGroupNamesForUserName($currentUser.getName()))
        
        #foreach ($userGroup in $userGroups)
          #foreach ($restrictGroup in $restrictGroups)
            #if($userGroup.equals($restrictGroup))
              <style>
                #user-menu-link-content {
                  display: none;
                }
                #user-menu-link:hover {
                  cursor: initial;
                  background-color: initial !important;
                }
              </style>
              #break
            #end
          #end
        #end
        
        ###############
        ##  ここまで  
        ###############
        
        
            ## Confluence Front-end Analytics
            #if($darkFeatures.isDarkFeatureEnabled('confluence.frontend.stats'))
                #includePluginJavascript("confluence.web.resources:js-reporting", "js-reporting.js")
        ... 省略 ...

        #set ($restrictGroups = ["confluence-users", "confluence-users2"])
        の部分で非表示にさせたいグループを指定してください。

      3. sugiyama yukari

        ご返信遅くなってしまい、すみません。

        こちらConfluenceの管理権限を持つユーザーでのみ「レイアウト」タブが表示されるのを理解しておらず、少々手こずっておりました。

        「レイアウト」タブに上記の内容を記載し、グループ名を指定することで期待する表示にすることができました。

        丁寧なご回答ありがとうございました。

      Commentコメントを追加...