powered by nequal

rhaco1-doc :: 002-model/02-login-condition-model.txt

http://wikihub.org/wiki/rhaco1-doc/002-model/02-login-condition-model

Table of contents:

collapse all expand all

Updates:

ログイン条件モデル

モデルモデルと言いますが,何もテーブルだけがモデルではありません.

rhaco では,ログイン条件もモデル化することができます.

ログイン条件のモデル化によって,複雑なログイン条件でも実装することが可能となる一方,各 View においては非常に簡便に取り扱うことができます.

Dbと連携したログイン条件モデル

例えばよくあるのが,ログイン ID とパスワードで認証を掛ける方法ですが,以下のように実装します.

<?php
Rhaco::import("network.http.model.RequestLoginConditionDb");
Rhaco::import("model.User");
/**
 * ユーザ用のログイン条件モデル
 */
class RequestLoginConditionUser extends RequestLoginConditionDb{
	/**
	 * コンストラクタ
	 * @param DbUtil $dbUtil
	 */
	function RequestLoginConditionUser(&$dbUtil){
		$this->__init__($dbUtil,new User());
	}
	/**
	 * 認証完了後の処理
	 */
	function after(){
		Header::redirect(Rhaco::url("user"));
	}
}

User モデルには,ログイン処理を実装します.

<?php
Rhaco::import("model.table.UserTable");
class User extends UserTable{
	/**
	 * ログイン処理
	 */
	function loginCondition(&$db,&$object,$request){
		$object = $db->get($this,
			new C(
				Q::eq($this->columnLogin(),$request->getVariable("login")),
				Q::eq($this->columnPassword(),md5($request->getVarialbe("password")))
				)
			);
		return Variable::istype("User",$object);
	}
}

View でログイン条件を指定します.

<?php
 
//いっぱいコード
//:
RequestLogin::loginRequired(new RequestLoginConditionUser($db));

このようにしてログイン条件モデルを渡すことで実際のログイン処理を隠蔽してしまうことが可能となります.