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|