class Permissify::DSL
Evaluated (via instance_eval) inside ‘Permissify.define`. Every call writes an immutable entry into a ResourceDefinition. Duplicate names and missing blocks fail loudly at boot; there is no implicit behaviour.
Public Class Methods
new(definition)
click to toggle source
# File lib/permissify/dsl.rb, line 8 def initialize(definition) @definition = definition end
Public Instance Methods
action(name, maps_to:)
click to toggle source
Explicit, finite action aliases. There is no generated “:#{action}able” fallback — an unregistered action denies.
# File lib/permissify/dsl.rb, line 30 def action(name, maps_to:) key = name.to_sym guard_unique!(@definition.actions, key, "action alias") @definition.actions[key] = maps_to.to_sym end
fact(name, &block)
click to toggle source
# File lib/permissify/dsl.rb, line 12 def fact(name, &block) raise DefinitionError, "fact(:#{name}) requires a block" unless block key = name.to_sym guard_unique!(@definition.facts, key, "fact") @definition.facts[key] = block end
permission(name, &block)
click to toggle source
# File lib/permissify/dsl.rb, line 20 def permission(name, &block) raise DefinitionError, "permission(:#{name}) requires a block" unless block key = name.to_sym guard_unique!(@definition.permissions, key, "permission") @definition.permissions[key] = block end
scope(permission_name, &block)
click to toggle source
A SQL-capable scope for a permission: a block ->(actor, relation, environment) that returns a narrowed relation. authorized_scope requires one — collections are never filtered in Ruby as a security boundary.
# File lib/permissify/dsl.rb, line 39 def scope(permission_name, &block) raise DefinitionError, "scope(:#{permission_name}) requires a block" unless block key = permission_name.to_sym guard_unique!(@definition.scopes, key, "scope") @definition.scopes[key] = block end