メイン CakePHP コントローラ(Controller)
レコードに対するアクセスコントロールについて教えてください | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| dozono | 投稿日時: 2010-3-12 14:46 |
Baker スタート ![]() ![]() 登録日: 2010-3-8 居住地: 投稿: 2 |
レコードに対するアクセスコントロールについて教えてください 初めて投稿しますCakephp初心者です。
データベースの各レコードに対するアクセスコントロールについて教えてください 以下のような構造のテーブル、レコードがあると仮定します。 テーブル名:reports id emp_no name title 1 120 山田太郎 AAAについて 2 125 田中一郎 BBBについて 3 127 佐藤次郎 CCCについて 4 125 田中一郎 DDDについて ・ ・ ・ ・ また次のようなUsersテーブルがありAuth認証を利用しています。 id username password 1 120 xxxxxxx 2 121 xxxxxxx 3 122 xxxxxxx ・ ・ ・ ・ ・ ・ やりたいこと 1.各レコードのREAD,UPDATEはAuth認証でLoginした"username"とreportsテーブルの"emp_no"が一致した場合にだけ可能 つまり自分のレコードについてのみREAD, UPDATEできる。 2.また管理者としての山田太郎はCREATE, READ, UPDATE, DELETEが可能 アクセス制御リストを利用する方法はbook.cakephp.orgなどで理解できましたが、 レコードが500以上ありアクセス制御リストでARO/ACOを利用すると、それぞれが膨大になり、手間がかかりすぎてしまい適切ではありません。 Sessionの利用など他の方法でのreports_controllerの書き方のSampleを教えてください よろしくお願いします。 堂園正人 |
| MASA-P | 投稿日時: 2010-3-12 17:51 |
Cake 職人 ![]() ![]() 登録日: 2008-1-24 居住地: 投稿: 224 |
Re: レコードに対するアクセスコントロールについて教えてください 単純にユーザはユーザレコードのみ、管理者は全部、ということであれば、Userモデル内にadminフラグを用意して、それで管理者判定してみてはいかがでしょう?
AuthでUserから判定するのであれば、usersテーブルに登録されているフィールドは全部ログイン中にAuth::user()から取れます。なので、例えばUser.admin_flagフィールドが0(一般ユーザ)の場合はfindのconditionsにReport.emp_no = User.nameを入れ、1(管理者)の場合はこの指定を除外するようにすればOKではないかと思います。 |
| dozono | 投稿日時: 2010-3-30 15:15 |
Baker スタート ![]() ![]() 登録日: 2010-3-8 居住地: 投稿: 2 |
Re: レコードに対するアクセスコントロールについて教えてください 回答に対する返事が遅くなり申し訳ありません。
adminフラグを作成して、管理者判定は解決しました。 Auth UserとReportの対象レコードのemp_noが同一かどうかの判定をするif文がうまく書けずにはまっていました。 findを使うと戻り値がArrayとなり、Auth Userと比較できずにいましたが、以下のようにfieldを使うことで解決しました。 if ($this->Report->field("emp_no") != $this->Auth->user('username')){ アクション; } |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



