【CakePHP】DarkAuthの唯一の問題点(でも結構大きな問題)

DarkAuthを改良して、とりあえずゲストアクセスが可能になったのですが、いろいろとチェックをしてみて問題点が出てきました。
問題点というのは、Groupsでパーミッション指定が出来るのは大変によいのですが、ページアクセスするたびにDBへのアクセスが入るのです。

グループパーミッションの仕組みを単純に考えると、ログインした時点で、そのユーザが所属しているグループがアソシエーションで取得されてくるため、それをセッションなどに保存し、それとコントローラ毎(SuperDarkAuth(仮名)ならアクション毎)に設定されているグループ名を照合すれば、パーミッション機能を実現できるはずです。つまり、DBアクセスは毎回いらないはずなのです(ちなみにDarkAuthはセッションもしくはクッキーに検索結果を丸ごと保存して、認証判定に用いている)。

ところが、DarkAuthは、ページアクセスをするたびにDBからグループの全リストと、それに対するアクセス権のbool(実際には1か0の整数)が生成され、$this->DarkAuth->isAllowed()での判定と、viewへ_DarkAuthという変数名でリストを送っています。

上記の仕組みを採用するのなら、isAllowedの判定で使用しているアクセス権リストは不要になり、実質viewへ通知するためだけにDBにアクセスすることになります。しかし、全リストを使うような機会は通常は無いと思われますので、この処理は無駄なものではないかと考えます。

そこで、修正したものを公開しようかと考えていたのですが、よくよく考えてみるとオリジナルがあるものなので、それを改変して再公開するのにちょっと気が引けています。
アクション単位の変更については少量の変更のみで実現可能でしたので、前回の記事でコンポーネント自体はオリジナルを利用していただいて、差分だけ紹介させていただいたのですが、この改良を加えるには広い範囲での修正が必要になってしまいます。そうなると、紹介するためにはコンポーネント全体のソースを公開するしかありません。
Cakeのソースを引っ張り出すのならまあともかくとして、個人の方のソースを別の形にして黙って公開するのはかなり抵抗が。私が英語がとても得意なのなら、作者に直接コンタクトして解決が出来るかもしれないのですが…

というわけで、とりあえず自分用に改良をすすめ、ネット上では指摘程度にとどめておきます。ご意見やご要望等ありましたらコメント欄に残していただければ(^^;。


“【CakePHP】DarkAuthの唯一の問題点(でも結構大きな問題)” への2件の返信

  1. モデルキャッシュが効けば、DBアクセスはなくなるでしょうか。
    あと、DarkAuthも、obAuthという1.1のコンポーネントを参考にしている、と作者が公言していますので、改造DarkAuthにEcAuthとか名前をつけて公開されてもダイジョウブだと思います!
    まぁ、プロジェクトごとにニーズは異なるので、そういう「改造の過程」がいちばん参考になる気がします。役立つ情報、ありがとうございます!

  2. こちらこそ、いつも有用な助言をありがとうございます!

    モデルキャッシュなのですが、残念ながら全然効いていないようです。理由は良く分からないのですが、HABTMからの取得だからでしょうか? cacheQueriesを明示的にtrueにしてみたのですが、それでもダメだったです。

    なるほど、ObAuth系のコンポーネントだったんですね! なんか似ているなとは思っていたんですが。それなら違う名称で公開してしまっても大丈夫そうですね。暗黒面に対抗して「LightAuth」とかにしましょうか。実際軽いAuthを目指した結果になると思いますので(笑)。

    ちなみにBakeryの概要を眺めてみたのですが、グループリストを引っ張ってくる機能はしっかり特徴欄にありました。作者は意図的にやっているようですね。とりあえず必須機能としては外して、取得できる関数として残す方向で検討します。

コメントは受け付けていません。