/** * TrusteeInstanceRolesView * * Verwaltung der instanz-spezifischen Rollen und deren Berechtigungen. * Nur für Feature-Admins sichtbar (benötigt instance-roles.manage Permission). * * Diese View erlaubt das Anpassen der AccessRules für die Rollen dieser * spezifischen Trustee-Instanz. */ import React, { useState, useEffect, useCallback } from 'react'; import { useCurrentInstance } from '../../../hooks/useCurrentInstance'; import { AccessRulesEditor } from '../../../components/AccessRules'; import { FaUserShield, FaShieldAlt, FaSync, FaChevronDown, FaChevronRight } from 'react-icons/fa'; import api from '../../../api'; import styles from './TrusteeViews.module.css'; interface InstanceRole { id: string; roleLabel: string; description?: { [key: string]: string }; featureCode: string; mandateId: string; featureInstanceId: string; isSystemRole?: boolean; } export const TrusteeInstanceRolesView: React.FC = () => { const { instance } = useCurrentInstance(); const [roles, setRoles] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [expandedRoleId, setExpandedRoleId] = useState(null); // Get display text from multilingual object const getTextValue = (value: string | { [key: string]: string } | undefined): string => { if (!value) return ''; if (typeof value === 'string') return value; return value.de || value.en || Object.values(value)[0] || ''; }; // Load instance roles const fetchRoles = useCallback(async () => { if (!instance?.id || !instance?.mandateId) return; setLoading(true); setError(null); try { const response = await api.get(`/api/trustee/${instance.id}/instance-roles`, { headers: { 'X-Mandate-Id': instance.mandateId } }); const rolesList = response.data?.items || response.data || []; setRoles(Array.isArray(rolesList) ? rolesList : []); } catch (err: any) { const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Laden der Rollen'; setError(errorMsg); console.error('Error loading instance roles:', err); } finally { setLoading(false); } }, [instance?.id, instance?.mandateId]); useEffect(() => { fetchRoles(); }, [fetchRoles]); // Toggle role expansion const toggleRole = (roleId: string) => { setExpandedRoleId(prev => prev === roleId ? null : roleId); }; if (!instance) { return (
Keine Feature-Instanz ausgewählt
); } if (loading) { return (
Lade Instanz-Rollen...
); } if (error) { return (

{error}

); } return (

Instanz-Rollen & Berechtigungen

Verwalten Sie die Berechtigungen für die Rollen dieser Trustee-Instanz

Diese Rollen wurden von den Feature-Templates kopiert. Änderungen hier gelten nur für diese Instanz.
{roles.length === 0 ? (

Keine Instanz-Rollen gefunden

Instanz-Rollen werden automatisch erstellt, wenn Benutzer dieser Instanz zugewiesen werden.

) : (
{roles.map(role => (
toggleRole(role.id)} >
{expandedRoleId === role.id ? : } {role.roleLabel} {getTextValue(role.description)}
{role.isSystemRole && ( System )}
{expandedRoleId === role.id && (
)}
))}
)}
); }; export default TrusteeInstanceRolesView;