renaming noun to subject internally
This commit is contained in:
parent
240c281061
commit
d9f3c8b0ae
|
@ -1,10 +1,10 @@
|
||||||
module CanCan
|
module CanCan
|
||||||
# This error is raised when a user isn't allowed to access a given
|
|
||||||
# controller action. See ControllerAdditions#unauthorized! for details.
|
|
||||||
class AccessDenied < StandardError; end
|
|
||||||
|
|
||||||
# A general CanCan exception
|
# A general CanCan exception
|
||||||
class Error < StandardError; end
|
class Error < StandardError; end
|
||||||
|
|
||||||
|
# This error is raised when a user isn't allowed to access a given
|
||||||
|
# controller action. See ControllerAdditions#unauthorized! for details.
|
||||||
|
class AccessDenied < Error; end
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'cancan/ability'
|
require 'cancan/ability'
|
||||||
|
|
|
@ -49,9 +49,9 @@ module CanCan
|
||||||
# assert ability.cannot?(:destroy, Project.new)
|
# assert ability.cannot?(:destroy, Project.new)
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
def can?(action, noun, *extra_args)
|
def can?(action, subject, *extra_args)
|
||||||
matching_can_definition(action, noun) do |base_behavior, defined_actions, defined_nouns, defined_conditions, defined_block|
|
matching_can_definition(action, subject) do |base_behavior, defined_actions, defined_subjects, defined_conditions, defined_block|
|
||||||
result = can_perform_action?(action, noun, defined_actions, defined_nouns, defined_conditions, defined_block, extra_args)
|
result = can_perform_action?(action, subject, defined_actions, defined_subjects, defined_conditions, defined_block, extra_args)
|
||||||
return base_behavior ? result : !result
|
return base_behavior ? result : !result
|
||||||
end
|
end
|
||||||
false
|
false
|
||||||
|
@ -118,9 +118,9 @@ module CanCan
|
||||||
# can :read, :stats
|
# can :read, :stats
|
||||||
# can? :read, :stats # => true
|
# can? :read, :stats # => true
|
||||||
#
|
#
|
||||||
def can(action, noun, conditions = nil, &block)
|
def can(action, subject, conditions = nil, &block)
|
||||||
@can_definitions ||= []
|
@can_definitions ||= []
|
||||||
@can_definitions << [true, action, noun, conditions, block]
|
@can_definitions << [true, action, subject, conditions, block]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Define an ability which cannot be done. Accepts the same arguments as "can".
|
# Define an ability which cannot be done. Accepts the same arguments as "can".
|
||||||
|
@ -135,9 +135,9 @@ module CanCan
|
||||||
# product.invisible?
|
# product.invisible?
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
def cannot(action, noun, conditions = nil, &block)
|
def cannot(action, subject, conditions = nil, &block)
|
||||||
@can_definitions ||= []
|
@can_definitions ||= []
|
||||||
@can_definitions << [false, action, noun, conditions, block]
|
@can_definitions << [false, action, subject, conditions, block]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Alias one or more actions into another one.
|
# Alias one or more actions into another one.
|
||||||
|
@ -196,9 +196,9 @@ module CanCan
|
||||||
# If the ability is not defined then false is returned so be sure to take that into consideration.
|
# If the ability is not defined then false is returned so be sure to take that into consideration.
|
||||||
# If the ability is defined using a block then this will raise an exception since a hash of conditions cannot be
|
# If the ability is defined using a block then this will raise an exception since a hash of conditions cannot be
|
||||||
# determined from that.
|
# determined from that.
|
||||||
def conditions(action, noun)
|
def conditions(action, subject)
|
||||||
matching_can_definition(action, noun) do |base_behavior, defined_actions, defined_nouns, defined_conditions, defined_block|
|
matching_can_definition(action, subject) do |base_behavior, defined_actions, defined_subjects, defined_conditions, defined_block|
|
||||||
raise Error, "Cannot determine ability conditions from block for #{action.inspect} #{noun.inspect}" if defined_block
|
raise Error, "Cannot determine ability conditions from block for #{action.inspect} #{subject.inspect}" if defined_block
|
||||||
return defined_conditions || {}
|
return defined_conditions || {}
|
||||||
end
|
end
|
||||||
false
|
false
|
||||||
|
@ -206,12 +206,12 @@ module CanCan
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def matching_can_definition(action, noun, &block)
|
def matching_can_definition(action, subject, &block)
|
||||||
(@can_definitions || []).reverse.each do |base_behavior, defined_action, defined_noun, defined_conditions, defined_block|
|
(@can_definitions || []).reverse.each do |base_behavior, defined_action, defined_subject, defined_conditions, defined_block|
|
||||||
defined_actions = expand_actions(defined_action)
|
defined_actions = expand_actions(defined_action)
|
||||||
defined_nouns = [defined_noun].flatten
|
defined_subjects = [defined_subject].flatten
|
||||||
if includes_action?(defined_actions, action) && includes_noun?(defined_nouns, noun)
|
if includes_action?(defined_actions, action) && includes_subject?(defined_subjects, subject)
|
||||||
return block.call(base_behavior, defined_actions, defined_nouns, defined_conditions, defined_block)
|
return block.call(base_behavior, defined_actions, defined_subjects, defined_conditions, defined_block)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -234,18 +234,18 @@ module CanCan
|
||||||
end.flatten
|
end.flatten
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_perform_action?(action, noun, defined_actions, defined_nouns, defined_conditions, defined_block, extra_args)
|
def can_perform_action?(action, subject, defined_actions, defined_subjects, defined_conditions, defined_block, extra_args)
|
||||||
if defined_block
|
if defined_block
|
||||||
block_args = []
|
block_args = []
|
||||||
block_args << action if defined_actions.include?(:manage)
|
block_args << action if defined_actions.include?(:manage)
|
||||||
block_args << (noun.class == Class ? noun : noun.class) if defined_nouns.include?(:all)
|
block_args << (subject.class == Class ? subject : subject.class) if defined_subjects.include?(:all)
|
||||||
block_args << (noun.class == Class ? nil : noun)
|
block_args << (subject.class == Class ? nil : subject)
|
||||||
block_args += extra_args
|
block_args += extra_args
|
||||||
defined_block.call(*block_args)
|
defined_block.call(*block_args)
|
||||||
elsif defined_conditions
|
elsif defined_conditions
|
||||||
if noun.class != Class
|
if subject.class != Class
|
||||||
defined_conditions.all? do |name, value|
|
defined_conditions.all? do |name, value|
|
||||||
noun.send(name) == value
|
subject.send(name) == value
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -257,8 +257,8 @@ module CanCan
|
||||||
actions.include?(:manage) || actions.include?(action)
|
actions.include?(:manage) || actions.include?(action)
|
||||||
end
|
end
|
||||||
|
|
||||||
def includes_noun?(nouns, noun)
|
def includes_subject?(subjects, subject)
|
||||||
nouns.include?(:all) || nouns.include?(noun) || nouns.any? { |c| c.kind_of?(Class) && noun.kind_of?(c) }
|
subjects.include?(:all) || subjects.include?(subject) || subjects.any? { |c| c.kind_of?(Class) && subject.kind_of?(c) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user