0

このガイドに従ってカンカンの能力をテストしています:リンク

これは私の能力ファイルです: 更新: すべての能力ファイルを投稿しました。

#models/ability.rb
class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new(role:Role.find_by(name:'guest')) # in case of guest

if user.has_role? :admin
  can :manage, :all
end

if user.has_role? :author
  can :read, :all
  can :create, Msg
  can :create, Post
  can :destroy, Msg, user_id:user.id 
  can :destroy, Post, user_id:user.id 
  can :update, Post, user_id:user.id
  can :update, Msg, user_id:user.id
  can :destroy, Msg, post: { user_id:user.id }
end

if user.has_role? :moderator
  can :read, :all
  can :create, Msg
  can :destroy, Msg
  can :update, Msg ,    user_id:user.id
end

 if user.has_role? :guest
   can :read, Msg
   can :read, Post
 end

if user.has_role? :user
  can :read, :all
  can :create, Msg
  can :destroy, Msg , user_id:user.id 
  can :update, Msg , user_id:user.id 
end
end

これは私の仕様テストです:

require "cancan/matchers"
require 'spec_helper'

describe "when is moderator" do
 before do
   @u=FactoryGirl.create(:moderator)
   @p=FactoryGirl.create(:post,user_id: 1245)#To be sure @p don't belongs to @u
   @a=Ability.new(@u)
 end

it{ @a.should be_able_to(:update, Post) } #Ok, it must be pass
it{ @a.should be_able_to(:update, FactoryGirl.create(:post,:user_id => @u.id)) } #Ok, it must be pass
it{ @a.should be_able_to(:update,@p) } #passed, ***but should fail***
end

私は解決する考えがありません。私の意見では、この動作は無人です

4

0 に答える 0