3
2
1

特定ユーザーがログインした場合にすべてのページで以下の様な警告メッセージを表示する方法はありますでしょうか。

「このサイトの内容は社外非公開です。詳細はこちらを参照してください。」

    Commentコメントを追加...

    2 回答

    1.  
      6
      5
      4

      不可能ではないと思いますが、結構大変だと思います

      スペースのレイアウトはユーザーマクロで使う言語で書かれてまして、それをうまく使えばユーザー名(若しくはグループ?)でログインしているユーザーを判別して表示を分岐させる事は可能だと思います。

      私たちのConfluenceでは、実際にページ内のマクロの有無を判別してグループで表示を変える仕組みをスペースレイアウトにコードを埋め込み、入れています。

      とりあえず、使えそうな部分を抜粋してみました。
      (こちらのグループ情報が入っていますので、グループ名は改変してます)

      ##閲覧しているユーザーのグループを判別して、閲覧の可否をフラグで設定
      #set($user = $userAccessor.getUser($action.remoteUser.name))
      #set($group = $userAccessor.getGroup('group-name'))
      #if ($user && $group && $userAccessor.hasMembership($group, $user))
      #set($display_flg = true)
      #end

      この$display_flgで見せる部分を制御してる感じです

      多分リファレンスはもっと新しいバージョンがあると思いますが、上記コードを組んだ時に使っていたリファレンスのリンクを貼っておきます。

      https://docs.atlassian.com/atlassian-confluence/6.2.0/index.html?overview-summary.html

      全スペースに行きなり導入して、不具合が起こったら大変ですので、テスト用のスペースを作って、そのスペースのレイアウトで色々評価してみてください

      1. 荒木治

        詳細にご説明いただきありがとうございます!

      Commentコメントを追加...
    2.  
      5
      4
      3

      ログイン後ということは referer は login.action が含まれている URL だと思うので、
      カスタム HTML に以下のような JavaScript を適用することで
      警告のポップアップを表示させられるかと思いました...


      <script>
      AJS.toInit(function() {
        var user = AJS.Meta.get('remote-user');
        var referrer = document.referrer;
        var targetUrl = 'https://www.google.com/';
        
        if (!(user === 'shuzaburo' && /.*login\.action.*$/.test(referrer))) return;
        
        AJS.flag({
          type: 'warning',
          body: 'このサイトの内容は社外非公開です。<br/>'
              + '詳細は <a href="' + targetUrl + '">こちら</a> を参照してください。'
        });
      });
      </script>


      user の判定の部分は調整が必要です...

      1. 荒木治

        ありがとうございます。うまくいきました。

      2. Shuzaburo Doba

        ありがとうございます。

        実用的な回答になっていれば嬉しいです。

      Commentコメントを追加...