Декларативная авторизация - разрешить редактирование других комментариев, оставленных в вашей статье? - PullRequest
3 голосов
/ 04 февраля 2010

Я следую за декларативным разрешением Райана Бейтса railscast.Я пытаюсь добавить функциональность для автора конкретной статьи, чтобы иметь возможность редактировать комментарии, оставленные в его статье, независимо от того, является ли он владельцем или нет.Я пытался сделать это, но не смог заставить его работать.

  role :author do
    has_permission_on :articles, :to => [:new, :create]
    has_permission_on :articles, :to => [:edit, :update, :show] do
      if_attribute :user => is { user }
    end
    **has_permission_on :comments, :to => [:edit, :update] do
      if_attribute :article_id => is { user }
    end**
  end

Как мне изменить has_permission в строке комментариев, чтобы позволить пользователю редактировать комментарии, если они остались только в его статье?

Спасибо

Ответы [ 2 ]

3 голосов
/ 08 февраля 2010

Чтобы пользователь мог редактировать комментарии, опубликованные в его / ее статьях, правило должно выглядеть следующим образом:

role :author do
  [...]

  has_permission_on :comments, :to => [:edit, :update] do
    if_attribute :article_id => is_in { user.article_ids }
  end
end

Пожалуйста, обратите внимание на изменение на на is_in

При желании вы можете изменить user.article_ids на user.articles.collect{|a| a.id}.uniq

0 голосов
/ 07 февраля 2010

Ваше первое объявление ...

has_permission_on :articles, :to => [:edit, :update, :show] do
  if_attribute :user => is { user }
end

... отлично работает, потому что если :user равно user (который является текущим зарегистрированным пользователем - current_user), у вас есть разрешение навыполните объявленные действия с :articles.

Но если вы посмотрите на второе ...

has_permission_on :comments, :to => [:edit, :update] do
  if_attribute :article_id => is { user }
end

, вы увидите, что атрибут :article_id никогда не будет равнымна текущий вход в систему user.

Теперь я сам новичок в Rails, и я просто использовал некоторые базовые функции декларативного разрешения , поэтому я не знаю точного ответа натвоя проблема.Но я думаю, вы должны найти способ доступа к статьям этого user, что-то вроде if_attribute :article_id => is { user.articles.id }.

Возможно, вы найдете ответ здесь в документации

...