adding can method to Active Record for fetching records matching a specific ability, still needs documentation
This commit is contained in:
parent
baeef0b9dd
commit
3c68a911d0
|
@ -1,5 +1,7 @@
|
||||||
1.1.0 (not released)
|
1.1.0 (not released)
|
||||||
|
|
||||||
|
* Adding "can" method to Active Record for fetching records matching a specific ability
|
||||||
|
|
||||||
* Adding conditions behavior to Ability#can and fetch with Ability#conditions - see issue #53
|
* Adding conditions behavior to Ability#can and fetch with Ability#conditions - see issue #53
|
||||||
|
|
||||||
* Renaming :class option to :resource for load_and_authorize_resource which now supports a symbol for non models - see issue #45
|
* Renaming :class option to :resource for load_and_authorize_resource which now supports a symbol for non models - see issue #45
|
||||||
|
|
|
@ -11,3 +11,4 @@ require 'cancan/ability'
|
||||||
require 'cancan/controller_resource'
|
require 'cancan/controller_resource'
|
||||||
require 'cancan/resource_authorization'
|
require 'cancan/resource_authorization'
|
||||||
require 'cancan/controller_additions'
|
require 'cancan/controller_additions'
|
||||||
|
require 'cancan/active_record_additions'
|
||||||
|
|
20
lib/cancan/active_record_additions.rb
Normal file
20
lib/cancan/active_record_additions.rb
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
module CanCan
|
||||||
|
# This module is automatically included into all Active Record.
|
||||||
|
module ActiveRecordAdditions
|
||||||
|
module ClassMethods
|
||||||
|
def can(ability, action)
|
||||||
|
where(ability.conditions(action, self) || {:id => nil})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.included(base)
|
||||||
|
base.extend ClassMethods
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if defined? ActiveRecord
|
||||||
|
ActiveRecord::Base.class_eval do
|
||||||
|
include CanCan::ActiveRecordAdditions
|
||||||
|
end
|
||||||
|
end
|
22
spec/cancan/active_record_additions_spec.rb
Normal file
22
spec/cancan/active_record_additions_spec.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
require "spec_helper"
|
||||||
|
|
||||||
|
describe CanCan::ActiveRecordAdditions do
|
||||||
|
before(:each) do
|
||||||
|
@model_class = Class.new
|
||||||
|
stub(@model_class).where { :where_stub }
|
||||||
|
@model_class.send(:include, CanCan::ActiveRecordAdditions)
|
||||||
|
@ability = Object.new
|
||||||
|
@ability.extend(CanCan::Ability)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should call where(:id => nil) when no ability is defined so no records are found" do
|
||||||
|
stub(@model_class).where(:id => nil) { :no_where }
|
||||||
|
@model_class.can(@ability, :read).should == :no_where
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should call where with matching ability conditions" do
|
||||||
|
@ability.can :read, @model_class, :foo => 1
|
||||||
|
stub(@model_class).where(:foo => 1) { :found_records }
|
||||||
|
@model_class.can(@ability, :read).should == :found_records
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user