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