【CakePHP】本命に着手!しかし…

連想くんの方はデザインなどいくつか未達の箇所があるとはいえ、とりあえず目標としていた機能を実装して問題なく動いているようなので、先延ばしにしていた本命の方にかかろうと考えています。

とりあえず、ユーザサイドの仕組みの方を先にやってしまった方がイメージがつかみやすいかなと考えていますので、認証などの仕組みを考えているところなのですが…

Auth + Aclでちゃっちゃとやってしまおうかと思っていたのですが、ちょっと想定外だったというのか、勉強不足なのかもしれないのですが、このままでは認証部分は実現できないことが判明。もう少し調査してみるのですが、ダメだったら最悪自作するしかない…というところに現在来ています。

何故かというと、SNS等、必ずログインしないとサービスが受けられないようなサイトだったらこれら機能で問題がないのですが、例えばAmazon等ECなんかであると思うのですが「ログインするといろいろと得することがあるけど、ログインしなくてもサービスが受けられる」サイトを今回作ろうとしているため、あのような仕組みだと非常に都合が悪いのです。

例えば、このようなページがあるとします。

ページA:
 ゲスト(未ログイン状態)→OK(「ようこそゲストさん」と表示)
 一般ユーザ→OK(「ようこそ○○さん」と表示)
 VIPユーザ→OK(「ようこそ●●さん」と表示)

ページB:
 ゲスト→NG(ログイン画面に飛ばされる)
 一般ユーザ→OK(「ようこそ○○さん」と表示)
 VIPユーザ→OK(「ようこそ●●さん」と表示)

ページC:
 ゲスト→NG(ログイン画面に飛ばされる)
 一般ユーザ→NG(権限がない旨のエラーがでたあと、ページAに戻る)
 VIPユーザ→OK(「ようこそ●●さん」と表示)

つまり、「いくつかのページはログインが不要だけど、ログインが必要なページやパーミッションのかかったページがある」というわけです。また、ログイン状態を調べ、それに準じた内容になる仕組みも必要になります。

おそらく「Auth + Aclでも出来る」という指摘を受けそうな気がしますが…いや、チュートリアルを試したのですが、途中で心が折れました(大汗)。別途テーブルを作って制御しなくても、例えばUserモデル内にgroupというフィールドがあるだけでいいくらいなのです。かなり複雑な制御がサイト自身で必要と思われるため、認証部分は出来るだけシンプルにしておきたい…というのが本音なんですね。

Authコンポーネントでパーミッション以外の制御が問題ないことが前提で、Aclでない仕組みを作るのが一番簡単なのかもしれません。もしくは、ObAuthやDarkAuthなど利用できるのなら、そちらの方がいいかもしれませんが…とにかくゲストアクセスとVIPアクセスのような多段階のパーミッションがかけられればなんでもいいです。シンプルなのであれば。

Aclでない、もっとお手軽なパーミッション付き認証が標準になってくれるといいんですけどね。
確かDarkAuthが標準添付とかいう話があったような気がするのですが、どうなったんでしょうね?