lib/access-granted/role.rb in access-granted-0.1.1 vs lib/access-granted/role.rb in access-granted-0.2

- old
+ new

@@ -26,12 +26,12 @@ def cannot(action, subject, conditions = {}, &block) add_permission(false, action, subject, conditions, block) end def find_permission(action, subject) - relevant_permissions(action, subject).detect do |permission| - permission.matches_conditions?(subject) + permissions_by_action(action).detect do |permission| + permission.matches_subject?(subject) && permission.matches_conditions?(subject) end end def applies_to?(user) case @conditions @@ -42,37 +42,37 @@ else true end end - def relevant_permissions(action, subject) - permissions_by_action(action).select do |perm| - perm.matches_subject?(subject) - end - end - def matches_hash?(user, conditions = {}) conditions.all? do |name, value| user.send(name) == value end end def add_permission(granted, action, subject, conditions, block) prepare_actions(action).each do |a| - raise DuplicatePermission if relevant_permissions(a, subject).any? + raise DuplicatePermission if permission_exists?(a, subject) @permissions << Permission.new(granted, a, subject, conditions, block) @permissions_by_action[a] ||= [] @permissions_by_action[a] << @permissions.size - 1 end end private + def permission_exists?(action, subject) + permissions_by_action(action).any? do |permission| + permission.matches_subject?(subject) + end + end + def prepare_actions(action) if action == :manage actions = [:read, :create, :update, :destroy] else - actions = [action].flatten + actions = Array(*[action]) end end def permissions_by_action(action) (@permissions_by_action[action] || []).map do |index|