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 に答える