我试图阻止各种项目的编辑器使用cancan发布他们自己的作品,但它不能按预期工作。到目前为止,其他所有工作都非常有效。
例如:
can :publish, [Article, Review] do |doc|
doc.user != @user
end
查看
<% if can? :publish, @review %>
我按照文档设置了自定义操作,但到目前为止我还没有取得任何成功。
https://github.com/ryanb/cancan/wiki/Custom-Actions
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
答案 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