Μετάβαση στο περιεχόμενο

Αναφορά: Auth (πυρήνας)

Διαδρομή: app/Core/Auth.php

Ρόλος

Διαχείριση session, ταυτότητας χρήστη (id, email), εταιρείας (companyId), ρόλων/δικαιωμάτων, έναρξη session (startSession).

Δημόσιο API (ενδεικτικό)

Μέθοδοι όπως: check, id, companyId, hasRole, hasPermission, αποσύνδεση, κ.λπ.

API token (X-CARPET-TOKEN)

Για αιτήματα με URI που περιέχει /api, αν δεν υπάρχει συνδεδεμένος χρήστης στη συνεδρία, το middleware auth καλεί tryBootstrapFromCarpetToken(): διαβάζει την κεφαλίδα X-CARPET-TOKEN (εναλλακτικά REDIRECT_HTTP_X_CARPET_TOKEN ή ισοδύναμο από getallheaders).

  1. Κλειδί εταιρείας: αν ταιριάζει companies.api_token, γίνεται login() ως πρωτεύων χρήστης της εταιρείας (CompanyModel::findActiveByApiToken, CompanyUserModel::getPrimaryUserForCompany).
  2. Κλειδί χρήστη: αλλιώς αν ταιριάζει useraccounts.api_token, γίνεται login() για αυτόν τον χρήστη με την πρώτη ενεργή εταιρεία του (AccountModel::findActiveByApiToken, CompanyUserModel::getFirstCompany). Ίδια συμπεριφορά με κανονική σύνδεση (ρόλοι/δικαιώματα του χρήστη).

Τα tokens ορίζονται στο CompanyModel::create και AccountModel::create· migrations 20260416130000_companies_api_token.php και 20260416140000_useraccounts_api_token.php για υπάρχοντα δεδομένα.

Απόκτηση api_token χρήστη με κωδικό (API)

  • POST /api/auth/token — σώμα φόρμας: email ή username (το email του λογαριασμού) και password. Σε επιτυχία, το data περιέχει api_token (hex 64) και header: X-CARPET-TOKEN. Ισχύουν οι ίδιοι περιορισμοί με τη σύνδεση (εταιρεία, rate limit). Αν ο λογαριασμός έχει 2FA, η απάντηση περιλαμβάνει require_2fa: true· τότε POST /api/auth/token/verify-2fa με otp (ίδια συνεδρία cookie) επιστρέφει το token. Για παλιούς χρήστες χωρίς api_token, δημιουργείται αυτόματα (AccountModel::ensureApiToken).

Σημειώσεις προς συμπλήρωση

  • [ ] Δομή δεδομένων στη $_SESSION
  • [ ] Λήξη session / timeout από .env
  • [ ] Σχέση με AccountModel / CompanyUserModel