我用Devise和CanCan开始了一个Rails应用程序。我的用户与文章有一对多的关系。我是CanCan的新手,这是我打算做的事情:
管理
登录用户
访客用户
但是我无法理解CanCan的语法。我知道它会是这样的。
def initialize(user)
user ||= User.new
if user.admin?
can :manage, Article
else
can :read, Article
end
end
但这仅适用于管理员和访客用户,我不确定如何区分访客用户和登录用户,因为它在用户为空时创建新的用户对象。我已经看到代码应该是这样的can [:edit, :destroy], Article, :user_id => user.id
,但我不确定它是如何适合初始化方法的。
还有最后一个问题,如果我只在访客上定义can :read, Article
,是否会阻止其他操作,例如创建和更新,例如白色列出读取操作?
任何帮助将不胜感激。非常感谢!
答案 0 :(得分:16)
这就是我的所作所为:
在ability.rb
def initialize(user)
if user.nil?
can :read, Article
elsif user.admin?
can :manage, Article
else
can [:read, :create], Article
can [:update, :destroy], Article, :user_id => user.id
end
end
为了显示链接,我使用了这个:
- if can? :read, Article
= link_to 'Show', article
- if can? :create, Article
= link_to 'New Article', new_article_path
- if can? :update, article
= link_to 'Edit', edit_article_path(article)
- if can? :destroy, article
= link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' }
它似乎现在正在运作,但不确定这是否是最佳方式。
答案 1 :(得分:8)
您可以传递条件哈希:
can :manage, Article, :user_id => user.id
查看https://github.com/ryanb/cancan/wiki/defining-abilities了解详情。