3

我正在关注 Ryan Bates 的声明性授权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 以允许用户编辑评论,如果他们只留在他的文章中?

谢谢

4

2 回答 2

3

为了允许用户编辑发表在他/她的文章中的评论,规则应该如下所示:

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_idsbyuser.articles.collect{|a| a.id}.uniq

于 2010-02-08T18:44:40.777 回答
0

你的第一个声明...

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 }.

也许您可以文档中找到答案

于 2010-02-07T00:05:40.747 回答