Sicherheit & Zugriffskontrolle

Verwalten Sie Authentifizierungs-Actors, Autorisierungs-Scopes und Zugriffsrichtlinien.

Laden

local security = require("security")

actor

Gibt den aktuellen Sicherheits-Actor aus dem Ausführungskontext zurück.

local actor = security.actor()
if actor then
    local id = actor:id()
    local meta = actor:meta()

    logger:info("Request from", {
        user_id = id,
        role = meta.role
    })
end

Gibt zurück: Actor|nil

scope

Gibt den aktuellen Sicherheits-Scope aus dem Ausführungskontext zurück.

local scope = security.scope()
if scope then
    local policies = scope:policies()
    for _, policy in ipairs(policies) do
        print("Active policy:", policy:id())
    end
end

Gibt zurück: Scope|nil

can

Prüft, ob der aktuelle Kontext eine Aktion auf einer Ressource erlaubt.

-- Leseberechtigung prüfen
if not security.can("read", "user:" .. user_id) then
    return nil, errors.new("PERMISSION_DENIED", "Cannot read user data")
end

-- Schreibberechtigung prüfen
if not security.can("write", "order:" .. order_id) then
    return nil, errors.new("PERMISSION_DENIED", "Cannot modify order")
end

-- Mit Metadaten prüfen
local allowed = security.can("delete", "document:" .. doc_id, {
    owner_id = doc.owner_id,
    department = doc.department
})
Parameter Typ Beschreibung
action string Zu prüfende Aktion
resource string Ressourcenidentifikator
meta table Zusätzliche Metadaten (optional)

Gibt zurück: boolean

new_actor

Erstellt einen neuen Actor mit ID und Metadaten.

-- Benutzer-Actor erstellen
local actor = security.new_actor("user:" .. user.id, {
    role = user.role,
    department = user.department,
    email = user.email
})

-- Service-Actor erstellen
local service_actor = security.new_actor("service:payment-processor", {
    type = "service",
    version = "1.0.0"
})
Parameter Typ Beschreibung
id string Eindeutiger Actor-Identifikator
meta table Metadaten-Schlüssel-Wert-Paare

Gibt zurück: Actor

new_scope

Erstellt einen neuen benutzerdefinierten Scope.

-- Leerer Scope
local scope = security.new_scope()

-- Scope mit Richtlinien
local read_policy = security.policy("app:read-only")
local scope = security.new_scope({read_policy})

-- Scope inkrementell aufbauen
local scope = security.new_scope()
local policy1 = security.policy("app:read")
local policy2 = security.policy("app:write")
scope = scope:with(policy1):with(policy2)

Gibt zurück: Scope

policy

Ruft eine Richtlinie aus der Registry ab.

local policy, err = security.policy("app:admin-access")
if err then
    return nil, err
end

-- Richtlinie auswerten
local result = policy:evaluate(actor, "delete", "user:123")
if result == "allow" then
    -- erlaubt
elseif result == "deny" then
    -- verboten
else
    -- undefiniert, andere Richtlinien prüfen
end
Parameter Typ Beschreibung
id string Richtlinien-ID "namespace:name"

Gibt zurück: Policy, error

named_scope

Ruft eine vordefinierte Richtliniengruppe ab.

-- Admin-Scope holen
local admin_scope, err = security.named_scope("app:admin")
if err then
    return nil, err
end

-- Für erhöhte Operationen verwenden
local result = admin_scope:evaluate(actor, "delete", "user:123")
Parameter Typ Beschreibung
id string Richtliniengruppen-ID

Gibt zurück: Scope, error

token_store

Beschafft einen Token-Store zur Verwaltung von Authentifizierungstokens.

local store, err = security.token_store("app:tokens")
if err then
    return nil, err
end

-- Store verwenden...
store:close()
Parameter Typ Beschreibung
id string Token-Store-ID "namespace:name"

Gibt zurück: TokenStore, error

Actor-Methoden

Methode Gibt zurück Beschreibung
actor:id() string Actor-Identifikator
actor:meta() table Actor-Metadaten

Scope-Methoden

with / without

Richtlinien zum Scope hinzufügen oder entfernen.

local scope = security.new_scope()

-- Richtlinie hinzufügen
local write_policy = security.policy("app:write")
scope = scope:with(write_policy)

-- Richtlinie entfernen
scope = scope:without("app:read-only")

evaluate

Alle Richtlinien im Scope auswerten.

local result = scope:evaluate(actor, "read", "document:123")
-- "allow", "deny" oder "undefined"

if result ~= "allow" then
    return nil, errors.new("PERMISSION_DENIED", "Access denied")
end

contains

Prüfen, ob Scope eine Richtlinie enthält.

if scope:contains("app:admin") then
    show_admin_features()
end

policies

Gibt alle Richtlinien im Scope zurück.

local policies = scope:policies()
for _, policy in ipairs(policies) do
    print(policy:id())
end

Gibt zurück: Policy[]

Policy-Methoden

Methode Gibt zurück Beschreibung
policy:id() string Richtlinien-Identifikator
policy:evaluate(actor, action, resource, meta?) string "allow", "deny" oder "undefined"

TokenStore-Methoden

create

Authentifizierungstoken erstellen.

local actor = security.new_actor("user:123", {role = "user"})
local scope = security.named_scope("app:default")

local token, err = store:create(actor, scope, {
    expiration = "24h",  -- oder Millisekunden
    meta = {
        login_ip = request_ip,
        user_agent = user_agent
    }
})
Parameter Typ Beschreibung
actor Actor Actor für den Token
scope Scope Berechtigungs-Scope
options.expiration string/number Dauer-String oder ms
options.meta table Token-Metadaten

Gibt zurück: string, error

validate

Token validieren und Actor/Scope holen.

local actor, scope, err = store:validate(token)
if err then
    return nil, errors.new("UNAUTHENTICATED", "Invalid token")
end

Gibt zurück: Actor, Scope, error

revoke

Token ungültig machen.

local ok, err = store:revoke(token)

Gibt zurück: boolean, error

close

Token-Store-Ressource freigeben.

store:close()

Gibt zurück: boolean

Berechtigungen

Sicherheitsoperationen unterliegen der Sicherheitsrichtlinienauswertung.

Sicherheitsaktionen

Aktion Ressource Beschreibung
security.policy.get Richtlinien-ID Auf Richtliniendefinitionen zugreifen
security.policy_group.get Gruppen-ID Auf benannte Scopes zugreifen
security.scope.create custom Benutzerdefinierte Scopes erstellen
security.actor.create Actor-ID Actors erstellen
security.token_store.get Store-ID Auf Token-Stores zugreifen
security.token.validate Store-ID Tokens validieren
security.token.create Store-ID Tokens erstellen
security.token.revoke Store-ID Tokens widerrufen

Siehe Sicherheitsmodell für Richtlinienkonfiguration.

Fehler

Bedingung Art Wiederholbar
Kein Kontext errors.INTERNAL nein
Leere Token-Store-ID errors.INVALID nein
Berechtigung verweigert errors.INVALID nein
Richtlinie nicht gefunden errors.INTERNAL nein
Token-Store nicht gefunden errors.INTERNAL nein
Token-Store geschlossen errors.INTERNAL nein
Ungültiges Ablaufformat errors.INVALID nein
Token-Validierung fehlgeschlagen errors.INTERNAL nein
local store, err = security.token_store("app:tokens")
if err then
    if errors.is(err, errors.INVALID) then
        print("Invalid request:", err:message())
    end
    return nil, err
end

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.

Siehe auch