我正在关注Ryan Bates的declarative authorization 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以允许用户编辑评论(如果仅留在他的文章中?)
由于
答案 0 :(得分: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_ids
user.articles.collect{|a| a.id}.uniq
答案 1 :(得分: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 }
。
也许您可以在文档中找到答案here