making accessible_by action default to :index and parent action default to :show so we don't check :read action directly - closes #302
This commit is contained in:
parent
3639ca90eb
commit
fdd5ad022d
|
@ -105,7 +105,7 @@ module CanCan
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorization_action
|
def authorization_action
|
||||||
parent? ? :read : @params[:action].to_sym
|
parent? ? :show : @params[:action].to_sym
|
||||||
end
|
end
|
||||||
|
|
||||||
def id_param
|
def id_param
|
||||||
|
|
|
@ -4,7 +4,7 @@ module CanCan
|
||||||
module ModelAdditions
|
module ModelAdditions
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
# Returns a scope which fetches only the records that the passed ability
|
# Returns a scope which fetches only the records that the passed ability
|
||||||
# can perform a given action on. The action defaults to :read. This
|
# can perform a given action on. The action defaults to :index. This
|
||||||
# is usually called from a controller and passed the +current_ability+.
|
# is usually called from a controller and passed the +current_ability+.
|
||||||
#
|
#
|
||||||
# @articles = Article.accessible_by(current_ability)
|
# @articles = Article.accessible_by(current_ability)
|
||||||
|
@ -19,7 +19,7 @@ module CanCan
|
||||||
# @articles = Article.accessible_by(current_ability, :update)
|
# @articles = Article.accessible_by(current_ability, :update)
|
||||||
#
|
#
|
||||||
# Here only the articles which the user can update are returned.
|
# Here only the articles which the user can update are returned.
|
||||||
def accessible_by(ability, action = :read)
|
def accessible_by(ability, action = :index)
|
||||||
ability.model_adapter(self, action).database_records
|
ability.model_adapter(self, action).database_records
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -104,7 +104,7 @@ describe CanCan::ControllerResource do
|
||||||
it "should authorize parent resource in collection action" do
|
it "should authorize parent resource in collection action" do
|
||||||
@params[:action] = "index"
|
@params[:action] = "index"
|
||||||
@controller.instance_variable_set(:@category, :some_category)
|
@controller.instance_variable_set(:@category, :some_category)
|
||||||
stub(@controller).authorize!(:read, :some_category) { raise CanCan::AccessDenied }
|
stub(@controller).authorize!(:show, :some_category) { raise CanCan::AccessDenied }
|
||||||
resource = CanCan::ControllerResource.new(@controller, :category, :parent => true)
|
resource = CanCan::ControllerResource.new(@controller, :category, :parent => true)
|
||||||
lambda { resource.authorize_resource }.should raise_error(CanCan::AccessDenied)
|
lambda { resource.authorize_resource }.should raise_error(CanCan::AccessDenied)
|
||||||
end
|
end
|
||||||
|
@ -293,10 +293,10 @@ describe CanCan::ControllerResource do
|
||||||
@controller.instance_variable_get(:@project).name.should == "foobar"
|
@controller.instance_variable_get(:@project).name.should == "foobar"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should only authorize :read action on parent resource" do
|
it "should only authorize :show action on parent resource" do
|
||||||
project = Project.create!
|
project = Project.create!
|
||||||
@params.merge!(:action => "new", :project_id => project.id)
|
@params.merge!(:action => "new", :project_id => project.id)
|
||||||
stub(@controller).authorize!(:read, project) { raise CanCan::AccessDenied }
|
stub(@controller).authorize!(:show, project) { raise CanCan::AccessDenied }
|
||||||
resource = CanCan::ControllerResource.new(@controller, :project, :parent => true)
|
resource = CanCan::ControllerResource.new(@controller, :project, :parent => true)
|
||||||
lambda { resource.load_and_authorize_resource }.should raise_error(CanCan::AccessDenied)
|
lambda { resource.load_and_authorize_resource }.should raise_error(CanCan::AccessDenied)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user