OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

242_admin_capabilities.sql

2 KB
-- 242_admin_capabilities.sql
--
-- Systemnahe Admin-Bereiche bekommen eigene Berechtigungen. Bisher hingen sie
-- alle an `manage_users`; wer Cronjobs pflegen oder Protokolle lesen sollte,
-- brauchte damit die globale Benutzerverwaltung und konnte sich darüber selbst
-- zum Administrator machen.
--
-- Jede Rolle, die heute `manage_users` trägt, erhält die neuen Berechtigungen
-- mit: Der Umstieg nimmt niemandem einen Zugang, und wer sie enger fassen will,
-- entfernt sie einzeln unter Administration → Rollen.

INSERT IGNORE INTO `capabilities` (`name`, `description`, `category`, `risk_level`) VALUES
    ('admin_system',   'Systemzustand, Cronjobs, Protokolle und Bildoptimierung verwalten', 'admin', 'critical'),
    ('admin_settings', 'Allgemeine Einstellungen, Sicherheit, Anmeldeverfahren und Hersteller-Zugänge verwalten', 'admin', 'critical'),
    ('admin_api',      'API-Zugangsschlüssel und den WordPress-Connector verwalten', 'admin', 'high'),
    ('admin_email',    'Mailversand, E-Mail-Vorlagen und Benachrichtigungskanäle verwalten', 'admin', 'high'),
    ('admin_docs',     'Seiten-Vorlagen, Schlagworte, Archiv und Editor verwalten', 'admin', 'medium'),
    ('view_manual',    'Handbuch im Administrationsbereich lesen', 'admin', 'low');

-- Bestand: alle Rollen mit globaler Benutzerverwaltung übernehmen die neuen Rechte.
INSERT IGNORE INTO `role_capabilities` (`role_id`, `capability_id`)
SELECT rc.role_id, neu.id
FROM `role_capabilities` rc
JOIN `capabilities` alt ON alt.id = rc.capability_id AND alt.name = 'manage_users'
JOIN `capabilities` neu ON neu.name IN
    ('admin_system', 'admin_settings', 'admin_api', 'admin_email', 'admin_docs', 'view_manual');

-- Frischinstallationen und Administrator-Rollen ohne ausdrückliche Zuweisung.
INSERT IGNORE INTO `role_capabilities` (`role_id`, `capability_id`)
SELECT r.id, c.id FROM `roles` r, `capabilities` c
WHERE r.is_admin = 1 AND c.name IN
    ('admin_system', 'admin_settings', 'admin_api', 'admin_email', 'admin_docs', 'view_manual');