Tutorial 9~20 MinutenMittel
Security & Roles
Sichere deine APIs mit Rollen, Privacy-Annotations und dem integrierten Security-Scanner von Velisch.
Was du lernen wirst
- Rollenbasierte Zugriffskontrolle (RBAC)
- Privacy-Annotations für DSGVO
- Security-Decorators anwenden
- Automatische Schwachstellen-Erkennung
1
Security First
Velisch hat Sicherheit im Kern verankert. Der Compiler scannt automatisch nach SQL-Injections, Secret-Leaks und anderen Schwachstellen.
Automatischer Scan
SQL-Injection & Secret-Leak-Erkennung
RBAC
Rollenbasierte Zugriffskontrolle
Privacy
Native DSGVO-Unterstützung
2
DSGVO & Privacy
Mit @Privacy markierst du sensible Felder, die automatisch in API-Responses verschleiert werden.
struct User {
id: string,
name: string,
@Privacy
email: string, // Wird als "a***@example.com" ausgegeben
@Privacy
phone: string, // Wird als "+49***123" ausgegeben
@Privacy(mask: "****")
ssn: string, // Wird als "****" ausgegeben
}
@GET("/api/users/:id")
fn getUser(id: string): User {
// Email und Phone werden automatisch verschleiert
return db.find(User, id);
}
// Response:
// {
// "id": "123",
// "name": "Anna Schmidt",
// "email": "a***@example.com",
// "phone": "+49***456"
// }
// Für Admin-Zugriff: @IgnorePrivacy
@Auth
@Role("admin")
@IgnorePrivacy
@GET("/api/admin/users/:id")
fn getFullUser(id: string): User {
// Admin sieht alle Daten unverschleiert
return db.find(User, id);
}3
Rollenbasierter Zugriff
Kombiniere @Auth und@Role für feingranulare Zugriffskontrolle.
// Nur eingeloggte User
@Auth
@GET("/api/profile")
fn getProfile(): User {
return currentUser();
}
// Nur für Admins
@Auth
@Role("admin")
@DELETE("/api/users/:id")
fn deleteUser(id: string): void {
db.delete(User, id);
}
// Mehrere Rollen erlaubt
@Auth
@Role("admin", "moderator")
@PUT("/api/posts/:id/approve")
fn approvePost(id: string): Post {
let post = db.find(Post, id);
post.status = "approved";
return db.save(post);
}
// Eigene Ressourcen
@Auth
@Owner("userId") // Nur der Besitzer darf zugreifen
@GET("/api/orders/:id")
fn getOrder(id: string): Order {
return db.find(Order, id);
}Rollen aus Token
Die Rolle wird automatisch aus dem JWT-Token extrahiert. Du musst nur sicherstellen, dass dein Login-Endpunkt die Rolle korrekt im Token speichert.
4
Security-Scanner
Der integrierte Scanner prüft deinen Code bei jeder Kompilierung auf Schwachstellen:
// ❌ WARNUNG: Potentielle SQL-Injection
fn unsafeQuery(userId: string): List<User> {
return db.rawQuery("SELECT * FROM users WHERE id = " + userId);
}
// ✅ SICHER: Parametrisierte Query
fn safeQuery(userId: string): List<User> {
return db.query(User).where("id", "=", userId).findAll();
}
// ❌ WARNUNG: Secret im Code
let apiKey = "sk-1234567890abcdef";
// ✅ SICHER: Environment Variable
let apiKey = env.API_KEY;
// Scanner-Ausgabe bei `velin build`:
// ⚠️ [SECURITY] Possible SQL injection at main.velin:12
// ⚠️ [SECURITY] Hardcoded secret detected at main.velin:16
// ✅ Security scan passed with 2 warningsZusammenfassung
Was du gelernt hast:
- @Privacy für DSGVO-Konformität
- @Auth und @Role für RBAC
- Automatischer Security-Scanner
Nächste Schritte:
- Authentifizierung mit JWT/OAuth2