Fix bug with CanDefinition#tableized_conditions being used with Mongoid documents and add more specs for accesible_by with Mongoid.
This commit is contained in:
		
							parent
							
								
									25bf479f48
								
							
						
					
					
						commit
						d256aeb26e
					
				@ -22,7 +22,7 @@ module CanCan
 | 
				
			|||||||
    end    
 | 
					    end    
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def conditions
 | 
					    def conditions
 | 
				
			||||||
      @can_definitions.first.try(:tableized_conditions)
 | 
					      @can_definitions.first.instance_variable_get(:@conditions)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -83,6 +83,7 @@ module CanCan
 | 
				
			|||||||
      # internally uses Ability#conditions method, see that for more information.
 | 
					      # internally uses Ability#conditions method, see that for more information.
 | 
				
			||||||
      def accessible_by(ability, action = :read)
 | 
					      def accessible_by(ability, action = :read)
 | 
				
			||||||
        query = ability.query(action, self)     
 | 
					        query = ability.query(action, self)     
 | 
				
			||||||
 | 
					           
 | 
				
			||||||
        if query.conditions.blank?
 | 
					        if query.conditions.blank?
 | 
				
			||||||
          # this query is sure to return no results
 | 
					          # this query is sure to return no results
 | 
				
			||||||
          # we need this so there is a Mongoid::Criteria object to return, since an empty array would cause problems
 | 
					          # we need this so there is a Mongoid::Criteria object to return, since an empty array would cause problems
 | 
				
			||||||
 | 
				
			|||||||
@ -58,11 +58,21 @@ describe CanCan::MongoidAdditions do
 | 
				
			|||||||
    @model_class.accessible_by(@ability, :read).should == []
 | 
					    @model_class.accessible_by(@ability, :read).should == []
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  it "should return the correct records based on the defined ability" do
 | 
				
			||||||
 | 
					    @ability.can :read, @model_class, :title => "Sir"
 | 
				
			||||||
 | 
					    sir   = @model_class.create :title  => 'Sir'
 | 
				
			||||||
 | 
					    lord  = @model_class.create :title  => 'Lord'
 | 
				
			||||||
 | 
					    dude  = @model_class.create :title  => 'Dude'
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    @model_class.accessible_by(@ability, :read).should == [sir]
 | 
				
			||||||
 | 
					  end  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  describe "Mongoid::Criteria where clause Symbol extensions using MongoDB expressions" do
 | 
					  describe "Mongoid::Criteria where clause Symbol extensions using MongoDB expressions" do
 | 
				
			||||||
    it "should handle :field.in" do
 | 
					    it "should handle :field.in" do
 | 
				
			||||||
      obj = @model_class.create :title  => 'Sir'
 | 
					      obj = @model_class.create :title  => 'Sir'
 | 
				
			||||||
      @ability.can :read, @model_class, :title.in => ["Sir", "Madam"]
 | 
					      @ability.can :read, @model_class, :title.in => ["Sir", "Madam"]
 | 
				
			||||||
      @ability.can?(:read, obj).should == true
 | 
					      @ability.can?(:read, obj).should == true
 | 
				
			||||||
 | 
					      @model_class.accessible_by(@ability, :read).should == [obj]
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      obj2 = @model_class.create :title  => 'Lord'
 | 
					      obj2 = @model_class.create :title  => 'Lord'
 | 
				
			||||||
      @ability.can?(:read, obj2).should == false
 | 
					      @ability.can?(:read, obj2).should == false
 | 
				
			||||||
@ -72,6 +82,7 @@ describe CanCan::MongoidAdditions do
 | 
				
			|||||||
      obj = @model_class.create :title  => 'Sir'
 | 
					      obj = @model_class.create :title  => 'Sir'
 | 
				
			||||||
      @ability.can :read, @model_class, :title.nin => ["Lord", "Madam"]
 | 
					      @ability.can :read, @model_class, :title.nin => ["Lord", "Madam"]
 | 
				
			||||||
      @ability.can?(:read, obj).should == true
 | 
					      @ability.can?(:read, obj).should == true
 | 
				
			||||||
 | 
					      @model_class.accessible_by(@ability, :read).should == [obj]
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
      obj2 = @model_class.create :title  => 'Lord'
 | 
					      obj2 = @model_class.create :title  => 'Lord'
 | 
				
			||||||
      @ability.can?(:read, obj2).should == false
 | 
					      @ability.can?(:read, obj2).should == false
 | 
				
			||||||
@ -81,6 +92,7 @@ describe CanCan::MongoidAdditions do
 | 
				
			|||||||
      obj = @model_class.create :titles  => ['Palatin', 'Margrave']
 | 
					      obj = @model_class.create :titles  => ['Palatin', 'Margrave']
 | 
				
			||||||
      @ability.can :read, @model_class, :titles.size => 2
 | 
					      @ability.can :read, @model_class, :titles.size => 2
 | 
				
			||||||
      @ability.can?(:read, obj).should == true
 | 
					      @ability.can?(:read, obj).should == true
 | 
				
			||||||
 | 
					      @model_class.accessible_by(@ability, :read).should == [obj]
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
      obj2 = @model_class.create :titles  => ['Palatin', 'Margrave', 'Marquis']
 | 
					      obj2 = @model_class.create :titles  => ['Palatin', 'Margrave', 'Marquis']
 | 
				
			||||||
      @ability.can?(:read, obj2).should == false
 | 
					      @ability.can?(:read, obj2).should == false
 | 
				
			||||||
@ -90,6 +102,7 @@ describe CanCan::MongoidAdditions do
 | 
				
			|||||||
      obj = @model_class.create :titles  => ['Palatin', 'Margrave']
 | 
					      obj = @model_class.create :titles  => ['Palatin', 'Margrave']
 | 
				
			||||||
      @ability.can :read, @model_class, :titles.exists => true
 | 
					      @ability.can :read, @model_class, :titles.exists => true
 | 
				
			||||||
      @ability.can?(:read, obj).should == true
 | 
					      @ability.can?(:read, obj).should == true
 | 
				
			||||||
 | 
					      @model_class.accessible_by(@ability, :read).should == [obj]
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
      obj2 = @model_class.create
 | 
					      obj2 = @model_class.create
 | 
				
			||||||
      @ability.can?(:read, obj2).should == false
 | 
					      @ability.can?(:read, obj2).should == false
 | 
				
			||||||
@ -99,6 +112,7 @@ describe CanCan::MongoidAdditions do
 | 
				
			|||||||
      obj = @model_class.create :age  => 50
 | 
					      obj = @model_class.create :age  => 50
 | 
				
			||||||
      @ability.can :read, @model_class, :age.gt => 45
 | 
					      @ability.can :read, @model_class, :age.gt => 45
 | 
				
			||||||
      @ability.can?(:read, obj).should == true
 | 
					      @ability.can?(:read, obj).should == true
 | 
				
			||||||
 | 
					      @model_class.accessible_by(@ability, :read).should == [obj]
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
      obj2 = @model_class.create :age  => 40
 | 
					      obj2 = @model_class.create :age  => 40
 | 
				
			||||||
      @ability.can?(:read, obj2).should == false
 | 
					      @ability.can?(:read, obj2).should == false
 | 
				
			||||||
@ -106,8 +120,9 @@ describe CanCan::MongoidAdditions do
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "should call where with matching ability conditions" do
 | 
					  it "should call where with matching ability conditions" do
 | 
				
			||||||
 | 
					    obj = @model_class.create :foo => {:bar => 1}
 | 
				
			||||||
    @ability.can :read, @model_class, :foo => {:bar => 1}    
 | 
					    @ability.can :read, @model_class, :foo => {:bar => 1}    
 | 
				
			||||||
    @model_class.accessible_by(@ability, :read).should == @model_class.where(:foos => { :bar => 1 })
 | 
					    @model_class.accessible_by(@ability, :read).entries.first.should == obj
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "should not allow to fetch records when ability with just block present" do
 | 
					  it "should not allow to fetch records when ability with just block present" do
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user