rights system
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { useState, useEffect, useRef, useCallback } from 'react';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import {
|
||||
Box,
|
||||
TextField,
|
||||
@@ -36,14 +37,16 @@ const DIENSTGRAD_OPTIONS = [
|
||||
'Kommandant',
|
||||
];
|
||||
|
||||
const GROUP_OPTIONS = [
|
||||
'dashboard_admin',
|
||||
'dashboard_kommando',
|
||||
'dashboard_gruppenfuehrer',
|
||||
];
|
||||
|
||||
function NotificationBroadcastTab() {
|
||||
const { showSuccess, showError } = useNotification();
|
||||
const { data: groupOptions = [] } = useQuery<string[]>({
|
||||
queryKey: ['admin-permission-groups'],
|
||||
queryFn: async () => {
|
||||
const { permissionsApi } = await import('../../services/permissions');
|
||||
return permissionsApi.getGroups();
|
||||
},
|
||||
});
|
||||
const [titel, setTitel] = useState('');
|
||||
const [nachricht, setNachricht] = useState('');
|
||||
const [schwere, setSchwere] = useState<'info' | 'warnung' | 'fehler'>('info');
|
||||
@@ -198,7 +201,7 @@ function NotificationBroadcastTab() {
|
||||
<MenuItem value="">
|
||||
<em>Keine Einschraenkung</em>
|
||||
</MenuItem>
|
||||
{GROUP_OPTIONS.map((g) => (
|
||||
{groupOptions.map((g) => (
|
||||
<MenuItem key={g} value={g}>{g}</MenuItem>
|
||||
))}
|
||||
</TextField>
|
||||
|
||||
@@ -22,8 +22,10 @@ function getRoleFromGroups(groups: string[] | null): string {
|
||||
if (!groups) return 'Mitglied';
|
||||
if (groups.includes('dashboard_admin')) return 'Admin';
|
||||
if (groups.includes('dashboard_kommando')) return 'Kommandant';
|
||||
if (groups.includes('dashboard_gruppenfuehrer')) return 'Gruppenführer';
|
||||
if (groups.includes('dashboard_moderator')) return 'Moderator';
|
||||
if (groups.includes('dashboard_fahrmeister')) return 'Fahrmeister';
|
||||
if (groups.includes('dashboard_zeugmeister')) return 'Zeugmeister';
|
||||
if (groups.includes('dashboard_chargen')) return 'Chargen';
|
||||
if (groups.includes('dashboard_atemschutz')) return 'Atemschutz';
|
||||
return 'Mitglied';
|
||||
}
|
||||
|
||||
@@ -4,25 +4,25 @@ import { useNavigate } from 'react-router-dom';
|
||||
import { MonitorHeartOutlined } from '@mui/icons-material';
|
||||
import { adminApi } from '../../services/admin';
|
||||
import { useCountUp } from '../../hooks/useCountUp';
|
||||
import { useAuth } from '../../contexts/AuthContext';
|
||||
import { usePermissionContext } from '../../contexts/PermissionContext';
|
||||
|
||||
function AdminStatusWidget() {
|
||||
const { user } = useAuth();
|
||||
const { hasPermission } = usePermissionContext();
|
||||
const navigate = useNavigate();
|
||||
|
||||
const isAdmin = user?.groups?.includes('dashboard_admin') ?? false;
|
||||
const canView = hasPermission('admin:view');
|
||||
|
||||
const { data } = useQuery({
|
||||
queryKey: ['admin-status-summary'],
|
||||
queryFn: () => adminApi.getStatusSummary(),
|
||||
refetchInterval: 30_000,
|
||||
enabled: isAdmin,
|
||||
enabled: canView,
|
||||
});
|
||||
|
||||
const up = useCountUp(data?.up ?? 0);
|
||||
const total = useCountUp(data?.total ?? 0);
|
||||
|
||||
if (!isAdmin) return null;
|
||||
if (!canView) return null;
|
||||
|
||||
const allUp = data && data.up === data.total;
|
||||
const majorityDown = data && data.total > 0 && data.up < data.total / 2;
|
||||
|
||||
Reference in New Issue
Block a user