Role-Based Access Control (RBAC) in Next.js?

Ich arbeite an der Implementierung einer Role-Based Access Control (RBAC) für meine API basierend auf Next.Js und möchte sicherstellen, dass ich die Best Practices für effiziente Datenbankabfragen einhalte. Meine Anwendung verwendet Next.js zusammen mit einer Backend-Datenbank ORM (drizzle-orm), um Benutzerrollen und Berechtigungen zu verwalten.

CREATE TABLE Users (
    user_id SERIAL PRIMARY KEY,
    username VARCHAR(255) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE Roles (
    role_id SERIAL PRIMARY KEY,
    role_name VARCHAR(50) UNIQUE NOT NULL
);

CREATE TABLE UserRoles (
    user_id INT REFERENCES Users(user_id),
    role_id INT REFERENCES Roles(role_id),
    PRIMARY KEY (user_id, role_id)
);

CREATE TABLE Permissions (
    permission_id SERIAL PRIMARY KEY,
    permission_name VARCHAR(50) UNIQUE NOT NULL
);

CREATE TABLE RolePermissions (
    role_id INT REFERENCES Roles(role_id),
    permission_id INT REFERENCES Permissions(permission_id),
    PRIMARY KEY (role_id, permission_id)
);

CREATE TABLE Sessions (
    session_id UUID PRIMARY KEY,
    user_id INT REFERENCES Users(user_id),
    valid_until TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Derzeit werden bei jeder Anfrage die einem Benutzer zugewiesenen Rollen und Berechtigungen aus der Datenbank abgerufen, um die Zugriffsebene zu bestimmen. Ich bin jedoch besorgt über die potenziellen Auswirkungen dieses Ansatzes auf die Leistung, insbesondere wenn die Anwendung skaliert.

Was sind die besten Praktiken für die Implementierung von RBAC in Next.js bei gleichzeitiger Minimierung der Anzahl von Datenbankabfragen? Insbesondere interessiere ich mich für Strategien zur Zwischenspeicherung von Rollen- und Berechtigungsdaten, zur Optimierung der Token-basierten Autorisierung und zum Umgang mit dem Ablauf und der Ungültigkeit von Caches

programmieren, Datenbank, Webentwicklung, Authentifizierung
Software Planung/Gedanken?

Servus,

ich möchte aktuell eine Webanwendung programmieren.

Thema: Kochprogramm

Technik: Python, Flask, React, MySQL

Anforderungen der Webanwendung:

  • Anlegen und Editieren von Rezepten und Lebensmitteln
  • Dem User sollen Rezepte vorgeschlagen werden, die er mit seinen aktuellen Lebensmittelbestand zubereiten könnte (Rezepte erstellt der User alle selbst)
  • Fehlende Lebensmittel für ein Rezept sollen angezeigt werden können

Ich wollte nun fragen, ob meine Ideen so aufgehen könnten, oder ob ich etwas übersehe.

Ich würde folgenderweise vorgehen:

  • Ein Lebensmittel(Klasse)soll unter anderem die Attribute Maßeinheit, ID und Menge haben.
  • Ein Lebensmittel kann dann einem Rezept(Klasse) oder dem Lagerbestand(Klasse) zugewiesen werden (in einer ausgewählten Menge und Maßeinheit)
  • Eine weitere Klasse soll für das Umrechnen der Maßeinheiten und dem Vergleich des Lebensmittelbestands mit den jeweiligen gespeicherten Rezepten zuständig sein.
  • Rezept und Lager wären wie erwähnt jeweils eine eigene Klasse, welchen Lebensmittel als Instanz der Klasse "Lebensmittel" zugeordnet werden können.

Der Plan soll am Ende sein, dass von einer Datenbank abgerufen wird, welche Lebensmittel aktuell beim jeweiligen User in welcher Menge vorhanden sind, und welche Lebensmittel für ein Rezept in welcher Menge benötigt werden. Falls sich die Maßeinheiten unterscheiden (Prise, Gramm, Kilogramm) soll dies im Hintergrund umgerechnet werden.

Meint Ihr, dass könnte man so umsetzen? Übersehe ich vielleicht etwas?

Danke im Voraus!

 

programmieren, Informatik, Python, Softwareentwicklung

Meistgelesene Fragen zum Thema Programmieren