Release v2.4.2

This commit is contained in:
2026-08-03 12:45:27 +01:00
parent 2b9cabdab2
commit e95928f31c
141 changed files with 7694 additions and 5078 deletions
+60 -57
View File
@@ -33,18 +33,6 @@ const PERMISSION_SECTIONS = [
{ key: 'delete', name: 'Delete', description: 'Delete screens.' }
]
},
{
key: 'announcements',
order: 35,
name: 'Announcements',
sectionName: 'Content',
actions: [
{ key: 'read', name: 'Read', description: 'View announcements.' },
{ key: 'create', name: 'Create', description: 'Create new announcements.' },
{ key: 'update', name: 'Update', description: 'Update announcements.' },
{ key: 'delete', name: 'Delete', description: 'Delete announcements.' }
]
},
{
key: 'playlists',
order: 40,
@@ -93,9 +81,21 @@ const PERMISSION_SECTIONS = [
{ key: 'delete', name: 'Delete', description: 'Delete canvas sizes.' }
]
},
{
key: 'announcements',
order: 80,
name: 'Announcements',
sectionName: 'Content',
actions: [
{ key: 'read', name: 'Read', description: 'View announcements.' },
{ key: 'create', name: 'Create', description: 'Create new announcements.' },
{ key: 'update', name: 'Update', description: 'Update announcements.' },
{ key: 'delete', name: 'Delete', description: 'Delete announcements.' }
]
},
{
key: 'rss-feeds',
order: 75,
order: 90,
name: 'RSS feeds',
sectionName: 'Data Sources',
actions: [
@@ -105,21 +105,9 @@ const PERMISSION_SECTIONS = [
{ key: 'delete', name: 'Delete', description: 'Delete RSS feeds.' }
]
},
{
key: 'schedules',
order: 77,
name: 'Schedules',
sectionName: 'Data Sources',
actions: [
{ key: 'read', name: 'Read', description: 'View configured schedule groups.' },
{ key: 'create', name: 'Create', description: 'Create new schedule groups.' },
{ key: 'update', name: 'Update', description: 'Update schedule groups and entries.' },
{ key: 'delete', name: 'Delete', description: 'Delete schedule groups.' }
]
},
{
key: 'api-sources',
order: 76,
order: 100,
name: 'API sources',
sectionName: 'Data Sources',
actions: [
@@ -130,39 +118,20 @@ const PERMISSION_SECTIONS = [
]
},
{
key: 'fonts',
order: 95,
name: 'Fonts',
sectionName: 'Settings',
key: 'timetables',
order: 110,
name: 'Timetables',
sectionName: 'Data Sources',
actions: [
{ key: 'read', name: 'Read', description: 'View managed fonts.' },
{ key: 'create', name: 'Create', description: 'Upload managed fonts.' },
{ key: 'delete', name: 'Delete', description: 'Remove managed fonts.' }
]
},
{
key: 'background-tasks',
order: 100,
name: 'Background tasks',
sectionName: 'Settings',
actions: [
{ key: 'read', name: 'Read', description: 'View queued background tasks.' },
{ key: 'allow', name: 'Allow', description: 'Manage queued background tasks and clear finished items.' }
]
},
{
key: 'scheduled-tasks',
order: 101,
name: 'Scheduled tasks',
sectionName: 'Settings',
actions: [
{ key: 'read', name: 'Read', description: 'View scheduled refresh tasks.' },
{ key: 'allow', name: 'Allow', description: 'Run scheduled refreshes manually.' }
{ key: 'read', name: 'Read', description: 'View configured timetable groups.' },
{ key: 'create', name: 'Create', description: 'Create new timetable groups.' },
{ key: 'update', name: 'Update', description: 'Update timetable groups and entries.' },
{ key: 'delete', name: 'Delete', description: 'Delete timetable groups.' }
]
},
{
key: 'users',
order: 80,
order: 120,
name: 'Users',
sectionName: 'Settings',
actions: [
@@ -174,7 +143,7 @@ const PERMISSION_SECTIONS = [
},
{
key: 'rbac',
order: 90,
order: 130,
name: 'Roles and permissions',
sectionName: 'Settings',
actions: [
@@ -183,6 +152,37 @@ const PERMISSION_SECTIONS = [
{ key: 'update', name: 'Update', description: 'Update role details and permissions.' },
{ key: 'delete', name: 'Delete', description: 'Delete roles.' }
]
},
{
key: 'fonts',
order: 140,
name: 'Fonts',
sectionName: 'Settings',
actions: [
{ key: 'read', name: 'Read', description: 'View managed fonts.' },
{ key: 'create', name: 'Create', description: 'Upload managed fonts.' },
{ key: 'delete', name: 'Delete', description: 'Remove managed fonts.' }
]
},
{
key: 'background-tasks',
order: 150,
name: 'Task Queue',
sectionName: 'Settings',
actions: [
{ key: 'read', name: 'Read', description: 'View queued background tasks.' },
{ key: 'allow', name: 'Allow', description: 'Manage queued background tasks and clear finished items.' }
]
},
{
key: 'scheduled-tasks',
order: 160,
name: 'Scheduled tasks',
sectionName: 'Settings',
actions: [
{ key: 'read', name: 'Read', description: 'View scheduled refresh tasks.' },
{ key: 'allow', name: 'Allow', description: 'Run scheduled refreshes manually.' }
]
}
];
@@ -211,6 +211,8 @@ function normalizePermissionKey(permissionKey) {
return String(permissionKey || '').trim();
}
const PERMISSION_DENIED_MESSAGE = 'You do not have permissions to do this.';
function normalizePermissionKeys(permissionKeys) {
const normalized = [];
@@ -295,7 +297,7 @@ function requirePermission(permissionKey, options) {
return next();
}
const error = new Error('You do not have permission to access this area.');
const error = new Error(PERMISSION_DENIED_MESSAGE);
error.statusCode = 403;
error.expose = true;
next(error);
@@ -309,5 +311,6 @@ module.exports = {
hasPermission,
hasAnyPermission,
requirePermission,
normalizePermissionKeys
normalizePermissionKeys,
PERMISSION_DENIED_MESSAGE
};