CakePHP 1.3.x のACLサンプルプログラム

結論から書くと、勉強用や参考になるかなと思い、
CakePHPのACLサンプルプログラムを
ダウンロードできるようにgithubへアップしました。

I uploaded to GitHub CakePHP ACL sample programs
for study.

■GitHubサンプルプログラム(GitHub sample programs)
  256hax/CakePHP-1.3.x-ACL-samples – GitHub

アクセスしたら左上の [ZIP] ボタンを押して
ダウンロードできます。
そのあと、同じページに「README」が
書いてありますので、それをご参照ください。

■経緯
CakePHPのACLをチュートリアルをもとに
実装していたが、ややこしいうえに自分のやり方が
悪いのか、ちゃんと動作しなかった。
幸いにもエンジニアの人が解説したブログが
たくさんあったので、なんとか動くようになった。
ただ、意外にも「ダウンロードしてすぐ動かせる」
っていうファイル群が見つからなかったので、
ACLのサンプルプログラムを丸ごとアップしてみようと思う。

■参考サイト
 ACL を制御するシンプルなアプリケーション :: 開発例 :: マニュアル :: 1.3コレクション
 CakePHP ACL – アクセス制御リストを攻略する | hijiriworld Web Creators
 CakePHP – ACLの権限管理を超簡単にするプラグイン『Plugin ACL』 – 高橋です
 cakePHP チュートリアル「ACL を制御するシンプルなアプリケーション」 その1 – SystemGathering
 CakePHP – Auth component loop redirect 

■リダイレクト無限ループについて
 CakePHP 1.3.x のACLチュートリアルを実装後、
 UsersControllerの「$this->Auth->allow(‘*’);」を
 外すと、どのページにアクセスしても
 リダイレクトループ(ページ転送がループ)してしまい
 ダメだった。結局、下記のようにし、あとは
 パーミッションで対応(但し、下記方法が合ってるか不明)。

function beforeFilter() {
parent::beforeFilter();
//$this->Auth->allow(‘*’); 
if(isset($this->params[‘requested’])) {
$this->Auth->allow($this->action);
}
}
 
 

 あと、CakePHPチュートリアルの パーミッションの手動設定
 追加のみ実行可能で、変更はできないようで、
 色々いじったところ、混乱してハマった。

 なので、 ACL Plugin を使ったほうが確実。

CakeDC Searchプラグインで入力フォームにURLエンコードされた文字列が入ってしまう

■環境
 MAMP
 CakePHP 1.3.13
 プラグイン CakeDC Search

■現象
 CakeDC Searchプラグラインを使って、検索入力フォームに
 日本語を入れてPOSTで検索をすると、入力フォームの
 日本語がURLエンコードされた値に変換されてしまう。
 その間、URLパラメータは逆に日本語が入る。

■原因
 CakeDC SearchプラグインがURLエンコードを
 かけない処理にしているため。

■対策
 ContrlloerでCakeDC Searchプラグインを使う際に
 ’encode’ => true をセットすればOK。

 var $presetVars = array(
  array(‘field’ => ‘name’, ‘type’ => ‘value’, ‘encode’ => true),
 );

 対策など詳細。
 #23: URL Encoding – Issues – CakeDC/search – GitHub
 → For example, “word1 word2” queries correctly, but is displayed in the input field as “word1%20word2”.