2016-09-15 6 views
1

私はレールプロジェクトを作成していますが、CanCanCanを実装しようとしています。私は宝石をインストールし、コマンドを実行しました。私はその後、ability.rbにこれを追加しました:CanCanは投稿の編集を停止できません

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 

をしかし、今、私のプロジェクトで、私は別のユーザーにサインインする場合、私はまだ他のユーザーの投稿を編集することができます。

私が紛失していることについてのお手伝いをさせていただきます。 CanCanCanドキュメントによれば

答えて

1

で見ることができるようにエラーが私のposts_controller

+0

それを聞いてうれしい...あなたは、他のSOユーザーの利益のために答えたとしてマークする必要があります – Ren

0

実際のインスタンスオブジェクトが存在する場合、ブロックのみが評価されます。 クラスのアクセス許可をチェックするときに評価されません( インデックスアクションなど)。つまり、オブジェクトの属性に依存しない条件は、ブロックの外に移動する必要があります。

この

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

この

can :update, Project if user.admin? 

を行うので、代わりの

can :update, Post if post.user == user 
can :destroy, Post if post.user == user 
を行う

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

変更しません。

+0

こんにちは、私はあなたの提案を試してみましたが、他のユーザーの投稿 – user2320239

0

load_and_authorize_resourceを追加することで解決した私はそれがnersohと同じように設定しているcan :manage, Post, :user_id => user.id

のようなものを試してみてください、とその方法は私のために働く。コントローラーの投稿リソースを承認しようとしましたか?例えば、

class PostsController < ActionController::Base 
    load_and_authorize_resource 
end 
関連する問題