lib/access-granted/role.rb in access-granted-1.0.4 vs lib/access-granted/role.rb in access-granted-1.1.0

- old
+ new

@@ -6,11 +6,11 @@ @user = user @name = name @conditions = conditions @block = block @permissions = [] - @permissions_by_action = {} + if @block instance_eval(&@block) else configure end @@ -26,12 +26,14 @@ def cannot(action, subject, conditions = {}, &block) add_permission(false, action, subject, conditions, block) end def find_permission(action, subject) - permissions_by_action(action).detect do |permission| - permission.matches_subject?(subject) && permission.matches_conditions?(subject) + permissions.detect do |permission| + permission.action == action && + permission.matches_subject?(subject) && + permission.matches_conditions?(subject) end end def applies_to?(user) case @conditions @@ -50,35 +52,27 @@ end end def add_permission(granted, action, subject, conditions, block) prepare_actions(action).each do |a| - raise DuplicatePermission if permission_exists?(a, subject) - @permissions << Permission.new(granted, a, subject, @user, conditions, block) - @permissions_by_action[a] ||= [] - @permissions_by_action[a] << @permissions.size - 1 + raise DuplicatePermission if find_permission(a, subject) + permissions << Permission.new(granted, a, subject, @user, conditions, block) end end private def permission_exists?(action, subject) - permissions_by_action(action).any? do |permission| + permissions.any? do |permission| permission.matches_subject?(subject) end end def prepare_actions(action) if action == :manage actions = [:read, :create, :update, :destroy] else actions = Array(*[action]) - end - end - - def permissions_by_action(action) - (@permissions_by_action[action] || []).map do |index| - @permissions[index] end end end end