rework issue system
This commit is contained in:
@@ -22,11 +22,22 @@ class PermissionController {
|
|||||||
permissions = permissionService.getEffectivePermissions(groups);
|
permissions = permissionService.getEffectivePermissions(groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const maintenance = permissionService.getMaintenanceFlags();
|
||||||
|
|
||||||
|
logger.debug('GET /api/permissions/me', {
|
||||||
|
email: req.user?.email,
|
||||||
|
groups,
|
||||||
|
isAdmin,
|
||||||
|
permissionsCount: permissions.length,
|
||||||
|
maintenanceWissen: maintenance['wissen'] ?? false,
|
||||||
|
maintenanceAusruestungsanfrage: maintenance['ausruestungsanfrage'] ?? false,
|
||||||
|
});
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
data: {
|
data: {
|
||||||
permissions,
|
permissions,
|
||||||
maintenance: permissionService.getMaintenanceFlags(),
|
maintenance,
|
||||||
isAdmin,
|
isAdmin,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- Update feature_groups label
|
||||||
|
UPDATE feature_groups SET label = 'Interne Bestellungen' WHERE id = 'ausruestungsanfrage';
|
||||||
|
|
||||||
|
-- Update permission descriptions to remove "Shop-" references
|
||||||
|
UPDATE permissions SET description = 'Katalog einsehen' WHERE id = 'ausruestungsanfrage:view';
|
||||||
|
UPDATE permissions SET description = 'Artikel im Katalog verwalten' WHERE id = 'ausruestungsanfrage:manage_catalog';
|
||||||
|
UPDATE permissions SET description = 'Dashboard-Widget für Anfragen' WHERE id = 'ausruestungsanfrage:widget';
|
||||||
@@ -44,11 +44,11 @@ function BestellungenTab() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||||
{/* Pending Ausrüstungsanfragen */}
|
{/* Pending interne Bestellungen */}
|
||||||
{(requests?.length ?? 0) > 0 && (
|
{(requests?.length ?? 0) > 0 && (
|
||||||
<Paper sx={{ p: 2 }}>
|
<Paper sx={{ p: 2 }}>
|
||||||
<Typography variant="h6" gutterBottom>
|
<Typography variant="h6" gutterBottom>
|
||||||
Offene Ausrüstungsanfragen ({requests?.length})
|
Offene interne Bestellungen ({requests?.length})
|
||||||
</Typography>
|
</Typography>
|
||||||
{requestsLoading ? (
|
{requestsLoading ? (
|
||||||
<CircularProgress size={24} />
|
<CircularProgress size={24} />
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ interface ResetSection {
|
|||||||
|
|
||||||
const RESET_SECTIONS: ResetSection[] = [
|
const RESET_SECTIONS: ResetSection[] = [
|
||||||
{ key: 'reset-bestellungen', label: 'Bestellungen zuruecksetzen', description: 'Alle Bestellungen, Positionen, Dateien, Erinnerungen und Historie loeschen und Nummern zuruecksetzen.' },
|
{ key: 'reset-bestellungen', label: 'Bestellungen zuruecksetzen', description: 'Alle Bestellungen, Positionen, Dateien, Erinnerungen und Historie loeschen und Nummern zuruecksetzen.' },
|
||||||
{ key: 'reset-ausruestung-anfragen', label: 'Ausruestungsanfragen zuruecksetzen', description: 'Alle Ausruestungsanfragen und zugehoerige Positionen loeschen und Nummern zuruecksetzen.' },
|
{ key: 'reset-ausruestung-anfragen', label: 'Interne Bestellungen zuruecksetzen', description: 'Alle internen Bestellungen und zugehoerige Positionen loeschen und Nummern zuruecksetzen.' },
|
||||||
{ key: 'reset-issues', label: 'Issues zuruecksetzen', description: 'Alle Issues und Kommentare loeschen und Nummern zuruecksetzen.' },
|
{ key: 'reset-issues', label: 'Issues zuruecksetzen', description: 'Alle Issues und Kommentare loeschen und Nummern zuruecksetzen.' },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ const ChatPanelInner: React.FC = () => {
|
|||||||
sx={{
|
sx={{
|
||||||
display: { xs: 'none', sm: 'flex' },
|
display: { xs: 'none', sm: 'flex' },
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
width: 56,
|
width: 120,
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
borderRight: 1,
|
borderRight: 1,
|
||||||
borderColor: 'divider',
|
borderColor: 'divider',
|
||||||
@@ -207,12 +207,21 @@ const ChatPanelInner: React.FC = () => {
|
|||||||
const isSelected = room.token === selectedRoomToken;
|
const isSelected = room.token === selectedRoomToken;
|
||||||
return (
|
return (
|
||||||
<Tooltip key={room.token} title={room.displayName} placement="left" arrow>
|
<Tooltip key={room.token} title={room.displayName} placement="left" arrow>
|
||||||
<IconButton
|
<Box
|
||||||
onClick={() => selectRoom(room.token)}
|
onClick={() => selectRoom(room.token)}
|
||||||
sx={{
|
sx={{
|
||||||
mx: 'auto',
|
display: 'flex',
|
||||||
my: 0.25,
|
alignItems: 'center',
|
||||||
p: 0.5,
|
gap: 0.75,
|
||||||
|
px: 1,
|
||||||
|
py: 0.5,
|
||||||
|
cursor: 'pointer',
|
||||||
|
borderRadius: 1,
|
||||||
|
mx: 0.5,
|
||||||
|
bgcolor: isSelected ? 'action.selected' : 'transparent',
|
||||||
|
'&:hover': {
|
||||||
|
bgcolor: isSelected ? 'action.selected' : 'action.hover',
|
||||||
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Badge
|
<Badge
|
||||||
@@ -222,17 +231,29 @@ const ChatPanelInner: React.FC = () => {
|
|||||||
>
|
>
|
||||||
<Avatar
|
<Avatar
|
||||||
sx={{
|
sx={{
|
||||||
width: 32,
|
width: 28,
|
||||||
height: 32,
|
height: 28,
|
||||||
fontSize: '0.7rem',
|
fontSize: '0.65rem',
|
||||||
bgcolor: isSelected ? 'primary.main' : 'action.hover',
|
bgcolor: isSelected ? 'primary.main' : 'action.hover',
|
||||||
color: isSelected ? 'primary.contrastText' : 'text.primary',
|
color: isSelected ? 'primary.contrastText' : 'text.primary',
|
||||||
|
flexShrink: 0,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{room.displayName.substring(0, 2).toUpperCase()}
|
{room.displayName.substring(0, 2).toUpperCase()}
|
||||||
</Avatar>
|
</Avatar>
|
||||||
</Badge>
|
</Badge>
|
||||||
</IconButton>
|
<Typography
|
||||||
|
variant="caption"
|
||||||
|
noWrap
|
||||||
|
sx={{
|
||||||
|
flex: 1,
|
||||||
|
minWidth: 0,
|
||||||
|
fontWeight: isSelected ? 600 : 400,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{room.displayName}
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export const PermissionProvider: React.FC<PermissionProviderProps> = ({ children
|
|||||||
queryKey: ['my-permissions'],
|
queryKey: ['my-permissions'],
|
||||||
queryFn: permissionsApi.getMyPermissions,
|
queryFn: permissionsApi.getMyPermissions,
|
||||||
enabled: isAuthenticated,
|
enabled: isAuthenticated,
|
||||||
staleTime: 5 * 60 * 1000,
|
staleTime: 60 * 1000,
|
||||||
});
|
});
|
||||||
|
|
||||||
const permissions = useMemo(
|
const permissions = useMemo(
|
||||||
|
|||||||
Reference in New Issue
Block a user