CanCanCan无法阻止正在编辑的帖子

时间:2016-09-15 15:09:36

标签: ruby-on-rails cancancan

我正在制作一个rails项目,并且我正在尝试实施CanCanCan。我安装了gem并运行了命令。然后我将其添加到ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    # Define abilities for the passed in user here. For example:

      user ||= User.new # guest user (not logged in)
      if user.admin?
        can :manage, :all
      else
        can :update, Post do |post|
          post.user == user
        end
        can :destroy, Post do |post|
          post.user == user
        end
        can :create, Post
        can :read, :all
      end

  end
end

但是,现在在我的项目中,如果我登录其他用户,我仍然可以编辑其他用户的帖子。

对于我失踪的任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

通过将config.action_controller.asset_host = "d373p52igaakhgm9.cloudfront.net"添加到我的posts_controller

来解决错误

答案 1 :(得分:0)

根据CanCanCan文档,

  

仅在存在实际实例对象时评估该块。   在检查类的权限时(例如在   指数行动)。这意味着任何不依赖的条件   对象属性应移到块外。

     

不要这样做

can :update, Project do |project|
  user.admin? # this won't always get called
end
     

这样做

can :update, Project if user.admin?

所以而不是

can :update, Post do |post|
  post.user == user
end
can :destroy, Post do |post|
  post.user == user
end

改变

can :update, Post if post.user == user
can :destroy, Post if post.user == user

答案 2 :(得分:0)

尝试can :manage, Post, :user_id => user.id

之类的内容

正如您在https://github.com/ryanb/cancan/wiki/defining-abilities

所见

答案 3 :(得分:0)

我设置的方式与nersoh相同,并且该方法适用于我。您是否尝试过授权控制器中的帖子资源?例如,

class PostsController < ActionController::Base
  load_and_authorize_resource
end