Im ersten Teil dieser Serie haben wir die Grundlagen der Implementierung einer rollenbasierten Zugriffskontrolle in React mithilfe des useRoleManagement-Hooks untersucht. Wenn Sie es noch nicht gelesen haben, können Sie es hier nachlesen
Implementierung der rollenbasierten Zugriffskontrolle in React: Ein tiefer Einblick in den useRoleManagement Hook.
In diesem zweiten Teil werden wir tiefer in die Verwaltung dynamischer Rollennamen in Abhängigkeit von verschiedenen Umgebungen wie Staging und Produktion eintauchen. Dies ist entscheidend für die Aufrechterhaltung eines konsistenten und sicheren Rollenmanagements über verschiedene Entwicklungsstadien hinweg.
Übersicht
Bei der Entwicklung von Anwendungen kommt es häufig vor, dass für verschiedene Umgebungen unterschiedliche Rollennamen oder Berechtigungskonfigurationen gelten. Beispielsweise können Sie in der Entwicklung Test- oder Scheinrollennamen und in der Produktionsumgebung echte, produktionsbereite Rollennamen verwenden. Durch die korrekte Handhabung dieser dynamischen Rollennamen wird sichergestellt, dass sich Ihre Anwendung in den verschiedenen Phasen ihres Lebenszyklus konsistent und sicher verhält.
Umgebungsspezifische Rollenkonfiguration
Um Rollennamen dynamisch zu verwalten, können wir Umgebungsvariablen nutzen. Mithilfe dieser Variablen können wir unterschiedliche Rollenschlüssel für verschiedene Umgebungen definieren, die dann zum Laden der entsprechenden Berechtigungskonfiguration verwendet werden können.
So können wir das erreichen:
1. Umgebungsvariablen definieren
Geben Sie in Ihren Dateien .env.development und .env.produktion die Rollenschlüssel für jede Umgebung an. Zum Beispiel:
VITE_ROLE_KEYS_MANAGER=Manager_Test VITE_ROLE_KEYS_USER=USER_Test VITE_ROLE_KEYS_ADMIN=Admin_Test
VITE_ROLE_KEYS_MANAGER=Prod_Manager VITE_ROLE_KEYS_USER=Prod_USER VITE_ROLE_KEYS_ADMIN=Prod_Admin
Dieses Setup stellt sicher, dass Ihre Anwendung je nach Umgebung, in der sie ausgeführt wird, entsprechende Rollennamen verwendet.
2. Aktualisieren Sie das Berechtigungsobjekt
Verwenden Sie diese Umgebungsvariablen, um das Berechtigungsobjekt dynamisch zu definieren. Das Berechtigungsobjekt ordnet Rollenschlüssel spezifischen Berechtigungen für jede Rolle zu:
const permissions: Record<string, UserPermissions> = { [import.meta.env.VITE_ROLE_KEYS_MANAGER]: { partners: { add: false, view: false, edit: false, deleteRow: true }, // ... other permissions }, [import.meta.env.VITE_ROLE_KEYS_USER]: { partners: { add: false, view: false, edit: false, deleteRow: false }, // ... other permissions }, [import.meta.env.VITE_ROLE_KEYS_ADMIN]: { partners: { add: true, view: true, edit: true, deleteRow: true }, // ... other permissions }, };
Die import.meta.env-Syntax ermöglicht Ihnen den Zugriff auf Umgebungsvariablen, die in Ihren .env-Dateien definiert sind.
3. Verwenden Sie den useRoleManagement Hook
Im ersten Teil dieser Serie haben wir die Grundlagen der rollenbasierten Zugriffskontrolle in React mithilfe des useRoleManagement-Hooks untersucht. Wenn Sie es noch nicht gelesen haben, können Sie es hier nachlesen.
Der useRoleManagement-Hook extrahiert Benutzerrollen aus dem dekodierten JWT-Token, ordnet sie mithilfe der umgebungsspezifischen Rollenschlüssel Berechtigungen zu und gibt dann die relevanten Berechtigungen zurück:
export function useRoleManagement() { const { pathname } = useLocation(); const token = localStorage.getItem('token'); let decodedToken: Realm | null = null; try { if (token) { decodedToken = jwtDecode<Realm>(token); } } catch (error) { console.error('Invalid token:', error); } const roles = decodedToken?.realm_access?.roles ?? []; const roleExists = ifRoleExists(roles); const rolePermissions = getPermissions( roleExists, pathname !== '/' ? pathname : '/partners', ); if (!rolePermissions) { return {}; } const { add, view, edit, deleteRow, confirm, include, } = rolePermissions as Permissions; return { add, view, edit, deleteRow, confirm, include, }; }
Fazit
Durch die dynamische Verwaltung von Rollennamen über Umgebungsvariablen können Sie sicherstellen, dass sich die rollenbasierte Zugriffskontrolle Ihrer Anwendung in verschiedenen Umgebungen konsistent verhält. Dieser Ansatz bietet Flexibilität und trägt dazu bei, eine klare Trennung zwischen Entwicklungs- und Produktionskonfigurationen aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonUmgang mit dynamischen Rollennamen in verschiedenen Umgebungen mit dem useRoleManagement Hook (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!