baserCMS フロント認証時、ツールバー利用のちょっとした不都合

前回、「baserCMS フロント認証のログインURLを変更する」 の記事を書きましたが、同じく4系のフロント認証廻りでちょっと不都合に思っていることについてです。
フロント認証でメンバー専用ページを運用するケースで、ログアウトのUIを提供する方法としてツールバーを利用するのがもっとも自然だと思うのですが、例えばメンバー専用ページにブログプラグインを利用したページがある場合、下図で示すように不必要な「新規記事追加」ボタンが意図せずツールバーに表示されてしまいます。

フロント認証は、サイト管理(運用)権限を持たないユーザーですので「新規記事追加」ボタンの機能は与えられておらず、実際、「新規記事追加」ボタンを選択すると権限がないため、あらためて管理ログイン画面が表示されログインを促されてしまいます。せっかく管理ログイン画面のURLをセキュアに変更していたとしても、フロント認証のメンバーの知るところになってしまいます。

「新規記事追加」ボタンがツールバー(想定は管理ツールバー)に追加された経緯は、fix #1615【ブログ】ツールバー「編集」リンクの隣に「新規記事追加」リンクを追加 #1788 のgitHub - closedプルリクにあります。

そこで、上記の対応で変更された /theme/admin-third/Elements/admin/toolbar.php ファイルの // EVENT leftOfToolbar の該当コードを条件分岐で括って、フロント認証のユーザーを除外(管理ユーザーのみに限定)しようと思います。 お約束のコアファイルなので、一旦ファイルをコピーして、/theme/利用テーマ内/Elements/admin/toolbar.php に配置します。
コピーした /theme/利用テーマ内/Elements/admin/toolbar.php ファイル内のEVENT leftOfToolbar を含む、EVENT userMenuOfToolbar、EVENT rightOfToolbar の全てコードを以下のように条件分岐で括ります(今後のその他プラグイン拡張にも対応できるように)。


<!-- (前略) -->

<?php if (!empty($user) && in_array('admin', $currentUserAuthPrefixes)): ?>
    <?php
    // EVENT leftOfToolbar
    $event = $this->dispatchEvent('leftOfToolbar', [], ['layer' => 'View', 'class' => '', 'plugin' => '']);
    if (BcUtil::loginUser() && $event !== false) {
        echo ($event->result === null || $event->result === true)? '' : $event->result;
    }
    ?>
<?php endif ?>

<!-- (中略) -->

<?php if (in_array('admin', $currentUserAuthPrefixes)): ?>
    <?php
    // EVENT userMenuOfToolbar
    $event = $this->dispatchEvent('userMenuOfToolbar', [], ['layer' => 'View', 'class' => '', 'plugin' => '']);
    if ($event !== false) {
        echo ($event->result === null || $event->result === true)? '' : $event->result;
    }
    ?>
<?php endif ?>

<!-- (中略) -->

<?php if (!empty($user) && in_array('admin', $currentUserAuthPrefixes)): ?>
    <?php
    // EVENT rightOfToolbar
    $event = $this->dispatchEvent('rightOfToolbar', [], ['layer' => 'View', 'class' => '', 'plugin' => '']);
    if ($event !== false) {
        echo ($event->result === null || $event->result === true)? '' : $event->result;
    }
    ?>
<?php endif ?>

<!-- (後略) -->

以上で、理想とするフロント認証のツールバーが出力されます。

コメント


コメントする


6xZKQU