rails cancan自定义操作

时间:2012-07-15 07:45:37

标签: ruby-on-rails ruby ruby-on-rails-3 cancan railscasts

我试图阻止各种项目的编辑器使用cancan发布他们自己的作品,但它不能按预期工作。到目前为止,其他所有工作都非常有效。

例如:

can :publish, [Article, Review] do |doc|
  doc.user != @user
end

查看

<% if can? :publish, @review %>

我按照文档设置了自定义操作,但到目前为止我还没有取得任何成功。

https://github.com/ryanb/cancan/wiki/Custom-Actions

ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    @user = user || User.new # for guest
    @user.roles.each { |role| send(role) }

    if @user.roles.size == 0
      can :read, :all #for guest without roles
    end
  end

  def author
    can :manage, [Article, Review] do |doc|
      doc.try(:user) == @user
    end
    can :submit, [Article, Review]
  end

  def editor
    can :manage, [Article, Review]
    can :publish, [Article, Review] do |doc|
      doc.user != @user
    end
  end

  def admin
    can :manage, :all
    can [:submit, :publish, :reject], [Article, Review]
  end
end

1 个答案:

答案 0 :(得分:3)

我认为你正在寻找这个

cannot :publish, [Article, Review], :user_id => @user.id

这就是说,如果文章的创建者是他们,则用户无法发布文章或评论。

例如,在我的应用程序中,我有登录用户可以创建新问题的位置。用户可以管理自己的问题,用户可以对问题进行投票。但是,用户无法对自己的问题进行投票。这听起来很熟悉吗? :)

  can [:new, :create], Question
  can :manage, Question, :user_id => user.id
  can :vote, Question
  cannot :vote, Question, :user_id => user.id