edo1z blog

プログラミングなどに関するブログです

管理画面のメニューを自動で作成する

管理者の権限は色々ありますし、最終的にはメソッド単位で細かく管理できないといけないと思います。 あと、単にそのメソッドを実行できるか否かだけではなく、どのデータを扱うことができるかまで管理できる必要があります。 こういうのはどうもACLというらしいです。

すごく基本的な管理者権限を考えると、管理者のグループを作成して、そのグループがどのモデルに属するかを設定するといいのではないかと思いました。例外処理ができないと実用的ではありませんが、グループがモデルに属するのであれば、アソシエーションの状態から、自動的に実行可能なメソッドと、編集可能なデータを決定できるのではないかと思います。

例えば、roleのグループをrolesというテーブルで管理しつつ、その各グループに属するモデルもデータベース上で設定しておきます。role_idが1のグループは、Shopモデルに属するのであれば、Shopが持っているHasOneとかHasManyとかのテーブルのみ管理できるようにすればよいです。ShopがMovieを持っている場合、Movieのadmin_index,admin_view,admin_edit,admin_deleteへのアクセスが許可されて、admin_indexは自分が持っているMovieのみ表示されるといった感じになります。これをコンポーネント化しておけば、beforeFileterとかで$this->Auth->user('role_id')をチェックして自動的に埋め込みが可能なんではないだろうかと思いました。