MISC

cakePHP2.3 ACL

cakePHP標準のACLは結構便利です。

ACL Plugin for CakePHP 2.0を使うと、各アクションのRole(Group)毎のアクセス権限もブラウザ上で簡単に管理できますので、非常に便利です。これの使い方は、このブログが参考になります。『CakePHPのACLを効率的に管理する』では、このプラグインはあまり積極的に使用しないと書いてあります。パーミッションをソースコード上で管理できず、データベース上で管理するため、Githubとかで複数人で作業する際に、パーミッションの設定内容について、各作業者毎に認識違い等がでる可能性がある。そのため、ソースコード側でパーミッションを設定した方が良いといったことを書かれているのかなと思いました。

僕の場合、可能な限りcakePHPによるWEBシステム作成を自動化したいと思っており、データベースに設定項目を集中させて、データベースの設定状態に応じてBake一発でサイトがほぼ完成するようなことを実現したいと思っているため、データベース側でパーミッション管理をすること自体は、特段問題ではありません。なのでこのプラグインをガンガン使ってもいいかなと思っております。

ただ、標準ACL機能と、上記プラグインを利用しても、各アクションで操作できるデータの対象については、管理できません。これをなんとかしたいと思っております。

例えば、会社モデルと店舗モデルと商品モデルがあった場合、管理者の種類として、サイト管理者、会社管理者、店舗管理者、商品管理者などが考えられます。店舗は会社に所属し、会社は複数の店舗を持っているとすると、会社管理者は店舗の追加や保有店舗情報の編集などが一般的にはできると思います。もちろん店舗を追加できないケースもありますし、削除できるケースもあれば出来ないケースもあります。店舗管理者は、当然ながら基本的に会社を作成することはできないはずであり、レイヤーからすれば、別の店舗を作成することも出来ないというケースが多いのかなと思います。また、商品は店舗に所属し、店舗は商品を複数保有するものとすれば、会社管理者は、商品も自社保有店舗の保有商品に関しては追加、編集、削除ができるというのが一般的だと思いますし、店舗も自店舗保有商品の追加・編集・削除のみできるというのが一般的だと思います。

これはアソシエーションの状況をみれば上記にて一般的とか基本的とか記載している内容に関しては、なんらかの自動設定をすることが可能と考えます。これらを、cakePHP標準のACL機能に付加することでより便利になるのではないかと思っております。

しかしながら、上記の一般的、基本的とか記載している内容に対するイレギュラーケースを考えると超沢山あります。 例えば、会社担当者の中でも権限が2つある場合などは、当然ながらアソシエーションに関する自動設定では不十分です。