1

UserモデルとモデルがあるとしましょうPostPostモデルにはフィールドが含まれていますuser_idUserがあり$hasManyPostありPostます。$belongsToUser

編集後のアクションがあります。

PostsController::edit($id) {
    if($this->request->isPost())
    {
        $this->Post->id = $id;
        $this->Post->save();
    }

    $post = $this->Post->read($id);
    $this->set(compact('post'));
}

AuthComponentユーザーのログインに使用します。

ユーザーがsome1 elseの投稿を編集できないようにするにはどうすればよいですか? これを行うための機能/オプションにケーキが組み込まれていますか? some1 は任意の ID でログインして編集アクションを投稿できるためです。投稿データを保存する場合でもありません-投稿が非公開であるとしましょう(所有者のみが表示する必要があります)-誰かが posts/edit/some_id を呼び出すと、この投稿の編集フォームが表示されます...

簡単な方法は、編集アクションの最初にこれを追加することです:

$this->Post->id = $id;
if($this->Post->readField('user_id') != $this->Auth->user('id')) 
{ //trigger error or redirect }

しかし、ユーザーに属するデータを更新/読み取る各アクションの先頭にこれを追加する必要があります。だから私はこれを行うためのよりエレガントな方法を探しています。

4

2 に答える 2

3

正確な例 (Post/User モデルも簡単に使用) はケーキのマニュアルにあります。

みんな優勝!

于 2012-06-22T11:26:16.380 に答える
1

ユーザーがアクションを実行する権限を持っているかどうかを確認する行を追加することを避ける方法はありません。Cake の最も強力な機能の 1 つである ACL (アクセス制御リスト) を使用している場合でも。

しかし、一般的にエレガンスについて話すように、ACL は最高の美しさになります :) 注意してください。簡単にあきらめないでください。それだけの価値があります。

Book http://book.cakephp.org/1.3/view/1543/Simple-Acl-managed-Applicationの ACL が表示されるはずです。

于 2012-06-22T11:48:12.060 に答える