.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
14 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 14

もっと...

.
.リンク集

メイン
   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')){
アクション;
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .