class Rolypoly::RoleScope
Attributes
actions[RW]
all_actions[RW]
resource[RW]
roles[RW]
Public Class Methods
new(roles, actions, resource = nil)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 6 def initialize(roles, actions, resource = nil) self.roles = Set.new Array(roles).map(&:to_s) self.actions = Set.new Array(actions).map(&:to_s) self.resource = resource self.all_actions = false end
Public Instance Methods
action?(check_actions)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 54 def action?(check_actions) check_actions = Set.new Array(check_actions).map(&:to_s) all_actions? || !(check_actions & actions).empty? end
all_actions?()
click to toggle source
# File lib/rolypoly/role_scope.rb, line 59 def all_actions? !!all_actions end
allow(*roles)
click to toggle source
on(resource).allow(*roles).to_access(*actions)
# File lib/rolypoly/role_scope.rb, line 19 def allow(*roles) self.roles = self.roles.merge(roles.flatten.compact.map(&:to_s)) self end
allow?(current_roles, action)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 41 def allow?(current_roles, action) action?(action) && role?(current_roles) end
allowed_roles(current_roles, action)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 45 def allowed_roles(current_roles, action) return [] unless action?(action) match_roles(current_roles) end
initialize_copy(other)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 13 def initialize_copy(other) @roles = @roles.dup @actions = @actions.dup end
on(resource)
click to toggle source
allow(*roles).on(resource).to_access(*actions)
# File lib/rolypoly/role_scope.rb, line 25 def on(resource) self.resource = resource self end
role?(check_roles)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 50 def role?(check_roles) Array(check_roles).any? { |check_role| allowed_role?(check_role) } end
to_access(*actions)
click to toggle source
allow(*roles).to_access *actions
# File lib/rolypoly/role_scope.rb, line 31 def to_access(*actions) self.actions = self.actions.merge actions.flatten.compact.map(&:to_s) end
to_all()
click to toggle source
allow role access to all actions allow(*roles).to_all
# File lib/rolypoly/role_scope.rb, line 37 def to_all self.all_actions = true end
Private Instance Methods
allowed_resource?(check_role, required_resource)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 63 def allowed_resource?(check_role, required_resource) return false unless check_role.respond_to?(:resource?) required_resources = type_id_resource?(required_resource) ? [required_resource] : Array(required_resource) required_resources.any? { |r| check_role.resource?(r) } end
allowed_role?(role_object)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 86 def allowed_role?(role_object) role_string = role_object.respond_to?(:to_role_string) ? role_object.to_role_string : role_object.to_s roles.include?(role_string.to_s) end
match_roles(check_roles)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 80 def match_roles(check_roles) Array(check_roles).select do |check_role| allowed_role?(check_role) end end
type_id_resource?(required_resource)
click to toggle source
# File lib/rolypoly/role_scope.rb, line 70 def type_id_resource?(required_resource) required_resource.is_a?(Array) && %w(String Symbol).include?(required_resource.first.class.name) end