LoginSignup
6
7

More than 5 years have passed since last update.

[baserCMS]ユーザー別にアクセス制限設定を調整したいとき

Last updated at Posted at 2015-02-08

baserCMSでは、ユーザーグループ別に、機能単位や画面単位でアクセス制限を設けて、不要なメニュー表示を調整したり、余分な機能を扱わせないようにすることで、管理システム利用者にとってシンプルで扱い易い管理システムを提供することができます。

  • アクセス制限設定の一覧画面URL例: /admin/permissions/index/2
    • システムナビ → ユーザーグループ一覧 → ユーザーグループの鍵アイコンへアクセス

この アクセス制限設定は、ユーザーグループ単位 となっているため、ユーザー単位で調整するには少しカスタマイズが必要です。
その方法ができたんでシェア。イベント処理使って調整できます。

必要な状況

  • baserCMSのアクセス制限設定を、ユーザー単位で調整入れたいとき
    • 例: Aグループでは固定ページ機能を許可するが、Aグループ内のhogeユーザーには許可したくない場面

環境

  • baserCMS 3.0.6.1
  • PHP 5.4.19

前提条件

  • ユーザーグループでのアクセス制限設定の調整を行っていることが前提
  • 紹介しているやり方はプラグイン・イベント

ファイルの作成

プラグイン内に ModelEventListener 作ります。

  • /app/Plugin/HogePlugin/Event/HogeModelEventListener.php
<?php
/**
 * [ModelEventListener] Hoge
 *
 */
class HogeModelEventListener extends BcModelEventListener {
/**
 * 登録イベント
 *
 * @var array
 */
    public $events = array(
        'Permission.afterFind',
    );

/**
 * permissionBeforeFind
 * ユーザーIDが2のユーザーでは固定ページ管理へのアクセスを不可にする
 * 
 * @param CakeEvent $event
 */
    public function permissionAfterFind(CakeEvent $event) {
        $Model = $event->subject();
        if (!BcUtil::isAdminSystem()) {
            return;
        }

        $user = BcUtil::loginUser();
        if ($user['id'] != '2') {
            return;
        }

        foreach ($event->data[0] as $key => $permission) {
            if ($permission['Permission']['url'] == '/admin/pages/*') {
                $event->data[0][$key]['Permission']['auth'] = false;
            }
        }
    }

}

何をやっているの?

アクセス制限設定は、/lib/Baser/Controller/BcAppController.php の beforeFilter() でチェックされており、beforeFileter() では、Permissionモデルの check() が走ってます。
check() では、ログイン中ユーザーのユーザーグループIDから、そのユーザーグループのアクセス制限設定の全データを取得してます。
そのため、find したあとのタイミングを利用して、ユーザーIDをもとに、取得したアクセス制限設定の中身を書換えることで、任意のユーザーIDのアクセス制限を設けることを実現してます。

その他のアプローチ

  • ID判定じゃなくても、ユーザーアカウント名での判定でも良い
  • 権限設定の1行分のデータを配列で作成して追加するやり方でも良い
    • けど、グループで既に設定済みのを使う方がラクだよね
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7