module Authorule

Constants

VERSION

Public Class Methods

available_permissions() click to toggle source

Retrieves all available permissions, organized by their kind, into a hash.

@return [Hash<Symbol,Array<Permission>>] An organized list of permissions.

# File lib/authorule.rb, line 62
def self.available_permissions
  available_permissions = {}

  permission_classes.each do |kind, klass|
    next unless klass.list_block

    available_permissions[kind] = []
    objects = klass.list_block.call

    objects.each do |object|
      available_permissions[kind] << klass.new(object)
    end
  end

  available_permissions
end
register(kind, klass) click to toggle source
# File lib/authorule.rb, line 25
def self.register(kind, klass)
  kind = kind.to_sym
  unless klass < Permission
    raise ArgumentError, "class #{klass.name} cannot be registered as a permission kind: it should be derived from Authorule::Permission"
  end
  if Authorule.permission_classes[kind]
    raise DuplicatePermission, "another permission class has already been registered for kind :#{kind}"
  end

  permission_classes[kind] = klass
end
resolve(target, action = nil) click to toggle source

Resolves a target. Tries all registered permission classes with a resolve block, and runs the target through the block. If anythin is returned, it is passed into the constructor of that permission class.

# File lib/authorule.rb, line 42
def self.resolve(target, action = nil)
  return target if target.is_a?(Authorule::Permission)

  permission_classes.values.each do |klass|
    next unless klass.resolve_block
    resolved = klass.resolve_block.call(target)

    return klass.new(resolved, action) if resolved
  end

  # If we got here, no schema returned a matching permission.
  raise PermissionResolutionError, "target #{target} could not be resolved into a permission"
end