fix(nextcloud-files): CR-02 Nextcloud-Adresse aendern nur noch Administratoren
- PUT settings traegt @Roles(ADMIN, SUPER_ADMIN) statt @ModuleManage (Muster wie TendersController.getSourceConfig); alle Benutzer schicken ihr Passwort an diese Adresse - POST settings/test: Verwalter ohne Administratorrolle pruefen nur die gespeicherte Adresse, jede andere Adresse ist 403 - Einstellungen fuer Verwalter nur lesbar mit kurzem Hinweis, ohne Speichern-Knopf; Hinweis "nicht eingerichtet" verweist Nicht-Administratoren an einen Administrator - Metadaten-Spec (module-manage-handlers), Controller-Spec, Seitentest, e2e-settings (Verwalter: 403 auf PUT und fremde Pruefung), Anleitungen und Changelog angepasst Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
type NextcloudFilesStatus,
|
||||
type NextcloudServerInfo,
|
||||
} from '@/lib/nextcloud-files-api';
|
||||
import { useAuthStore } from '@/lib/stores/auth-store';
|
||||
import { useCanManageModule } from '@/lib/use-module-capability';
|
||||
import { AccountBar } from './components/AccountBar';
|
||||
import { ConnectPanel } from './components/ConnectPanel';
|
||||
@@ -21,9 +22,10 @@ type TabId = 'files' | 'settings';
|
||||
|
||||
/**
|
||||
* Dateien (quick-261008-mzu): die Nextcloud-Dateien jedes Benutzers in Tessera.
|
||||
* Die Adresse der Nextcloud stellen Administratoren und Benutzer mit der
|
||||
* Freigabestufe Verwalten im Reiter "Einstellungen" ein; alle anderen sehen nur
|
||||
* den Reiter "Dateien" ohne Reiterleiste — bindend ist allein die API. Im
|
||||
* Den Reiter "Einstellungen" sehen Administratoren und Benutzer mit der
|
||||
* Freigabestufe Verwalten; die Adresse der Nextcloud AENDERN darf nur ein
|
||||
* Administrator (CR-02). Alle anderen sehen nur den Reiter "Dateien" ohne
|
||||
* Reiterleiste — bindend ist allein die API. Im
|
||||
* Abschnitt `nextcloud-files-main` verbindet jeder Benutzer sein eigenes Konto
|
||||
* (ConnectPanel); ist es verbunden, steht dort die Dateiansicht
|
||||
* (`nextcloud-files-browser`, FileBrowser). Laeuft die Verbindung ab, laedt die
|
||||
@@ -32,6 +34,8 @@ type TabId = 'files' | 'settings';
|
||||
export default function NextcloudFilesPage() {
|
||||
const t = useTranslations('nextcloudFiles');
|
||||
const canManage = useCanManageModule('nextcloud-files') === true;
|
||||
const role = useAuthStore((s) => s.user?.role);
|
||||
const isAdmin = role === 'ADMIN' || role === 'SUPER_ADMIN';
|
||||
|
||||
const [status, setStatus] = useState<NextcloudFilesStatus | null>(null);
|
||||
const [statusError, setStatusError] = useState(false);
|
||||
@@ -107,9 +111,9 @@ export default function NextcloudFilesPage() {
|
||||
{activeTab === 'files' && status && !status.configured && (
|
||||
<SettingsSection title={t('notConfigured.title')}>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{canManage ? t('notConfigured.managerHint') : t('notConfigured.userHint')}
|
||||
{isAdmin ? t('notConfigured.managerHint') : t('notConfigured.userHint')}
|
||||
</p>
|
||||
{canManage && (
|
||||
{isAdmin && canManage && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setTab('settings')}
|
||||
|
||||
Reference in New Issue
Block a user