Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

AuthComponentのUserModelを使い分けしたい

CakePHP->Version = '2.2.3';

利用者(弊社)、顧客、仕入先が各々弊社システムにログインできるようにしたいです、と言われた。以下のようなモデルになっている。

  • User(利用者)
  • Customer(顧客)
  • Maker(仕入先)

Userテーブルに顧客や仕入先をコピーしてぶち込むという荒技をやってロールをつけるみたいなことをやると、顧客や仕入先の情報が変わるたびに変更しなければならないのが鬱。

AuthComponentで管理されるユーザーオブジェクトの中身はモデルとは関係ないのだから、ログイン経路は一カ所にしてログイン時にAuthComponentのUserModelを切り替えるようなことをしたいと考えた所、stackoverflowにこんなスレが。

authentication - Cakephp Auth with multiple "Users" tables - Stack Overflow

師曰く、

  1. 画面にモデル名を持たせる
  2. AuthComponentを拡張してuserModelを複数持つ

この2つがある。

コンポーネントの拡張はしたくないから画面にモデル名を持たせる方式でStackOverFlowに乗ってたコードをちょっとだけ直して、最終的には以下のようになりました。

<?php
 /**
   * 画面からは$data['Customer']['username'] という形式でわたっていることが前提
   */ 
   function beforeFilter() {
        parent::beforeFilter();
        if (isset($this->data['model'])) {
            $this->Auth->authenticate = array(
                'Form' => array('userModel' => $this->data['model']),
            );
        }

    }