class Lanes::Access::RoleCollection

Public Class Methods

new(user) click to toggle source
# File lib/lanes/access/role_collection.rb, line 7
def initialize(user)
    @role_names = user.role_names
    @roles = user.role_names.map{ |name|
        "Lanes::Access::Roles::#{name.classify}".safe_constantize
    }.compact.map{ |klass| klass.new(user) }
end

Public Instance Methods

can_delete?(model,id) click to toggle source

@param model [Lanes::Model] @param id [Fixnum] the id of the record to remove @return [Boolean] Can the User delete the model?

# File lib/lanes/access/role_collection.rb, line 43
def can_delete?(model,id)
    klass=model_to_class(model)
    @roles.each{ |role| role.can_delete?(klass) }
end
can_read?(model, attribute = nil) click to toggle source

@param model [Lanes::Model] @param attribute [Symbol] @return [Boolean] Can the User view the model?

# File lib/lanes/access/role_collection.rb, line 27
def can_read?(model, attribute = nil)
    klass=model_to_class(model)
    test_access(klass, attribute, :read){ |role| role.can_read?(klass) }
end
can_write?(model, attribute = nil) click to toggle source

@param model [Lanes::Model] @param attribute [Symbol] @return [Boolean] Can the User create and update the model?

# File lib/lanes/access/role_collection.rb, line 35
def can_write?(model, attribute = nil)
    klass=model_to_class(model)
    test_access(klass, attribute, :write){ |role| role.can_write?(klass) }
end
each() { |r| ... } click to toggle source
# File lib/lanes/access/role_collection.rb, line 53
def each
    @roles.each{|r| yield r}
end
exposed_data() click to toggle source
# File lib/lanes/access/role_collection.rb, line 14
def exposed_data
    @role_names
end
include?(role) click to toggle source

@param role [String] @return [Boolean] Does a role with the given id exist?

# File lib/lanes/access/role_collection.rb, line 20
def include?(role)
    @role_names.include?(role)
end
to_sym() click to toggle source

@return [Array<symbol>] list of roles

# File lib/lanes/access/role_collection.rb, line 49
def to_sym
    @roles.map{ |r| r.class.to_s.demodulize.downcase.to_sym }
end

Private Instance Methods

model_to_class(model) click to toggle source
# File lib/lanes/access/role_collection.rb, line 63
def model_to_class(model)
    model.is_a?(Class) ? model : model.class
end
role_types() click to toggle source
# File lib/lanes/access/role_collection.rb, line 59
def role_types
    @role_types ||= @roles.map(&:class)
end
test_access(model, attribute, access_type) { |role| ... } click to toggle source

Test if the given roles grant access to the model

# File lib/lanes/access/role_collection.rb, line 68
def test_access(model, attribute, access_type)
    # Check if the attribute is locked
    # If it is, the locks determine access, otherwise use the model's grants
    locked_to_roles = LockedFields.roles_needed_for(model, attribute, access_type)
    if locked_to_roles.none?
        return @roles.detect{ |role| yield role }.present?
    else
        role_types.any?{|role| role.can_access_locked_roles?(locked_to_roles) }
    end
end