как ограничить пользователей только редактировать их записи - PullRequest
2 голосов
/ 10 января 2011

Привет, надеюсь, вы мне поможете.

Я использую rails 3 с самоцветом devise.
Я пытаюсь найти способ разрешить пользователям редактировать только созданные им посты / комментарии..
Должен ли я добавить камень CanCan для этого или я могу сделать это с помощью устройства?Или возможен простой запрос Active Record?

Большое спасибо.

Ответы [ 3 ]

10 голосов
/ 10 января 2011

Предполагая, что у вас есть отношения между User и Post / Comment, вы можете использовать это отношение только для извлечения записей, принадлежащих пользователю в вашем edit действии:

class PostsController < ApplicationController
  def edit
    # Instead of this:
    # Post.find(params[:id])
    # Use this:
    current_user.posts.find(params[:id])
  end
end

Это сообщение будет найдено только в том случае, если его создал текущий пользователь.

Естественно, вам также придется изменить действие update.

6 голосов
/ 10 января 2011

Devise создает хэш current_user, который вы можете использовать в своих контроллерах, моделях и представлениях.Так что должно быть легко создать чек, который делает что-то вроде этого:

@comment = Comment.find(params[:id])
if current_user.id == @comment.user.id
  # yadda
end 
1 голос
/ 10 января 2011

CanCan немного излишним для ваших нужд, но он будет более гибким для последующих эволюций.

В противном случае, просто сравните user_id и author_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...