2

我试图阻止各种项目的编辑能够使用 cancan 发布他们自己的作品,但它没有按预期工作。到目前为止,其他一切都运行良好。

例如:

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

看法

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

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

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

能力.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
4

1 回答 1

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
于 2012-07-15T14:52:57.927 回答