feat(wiki): Betriebsrat-Berechtigung (r-wiki-br)
Neue Permission r-wiki-br ermöglicht eingeschränkte Wiki-Bearbeitung: - Neue Permission in main_permission (ID 30: r-wiki-br) - Neue Spalte betriebsrat_editable in knowledgecenter_categories_update - Checkbox "Für Betriebsrat bearbeitbar" in der Kategorie-Verwaltung (nur für r-wiki-Redakteure sichtbar und speicherbar) Berechtigungslogik: - r-wiki schlägt immer: Wer beide Rechte hat, verhält sich wie Redakteur - Betriebsrat sieht nur Kategorien mit betriebsrat_editable=1 - "Beitrag erstellen"-Button nur in freigegebenen Kategorien sichtbar - Neue Posts/Bearbeitungen auf betriebsrat_editable-Kategorien beschränkt - Settings-Tab und Kategorieverwaltung weiterhin r-wiki-only - Ajax-Endpoints (save_post_files, delete_post_file, upload_inline_image) prüfen Kategorie-Berechtigung serverseitig File Gallery: - Betriebsrat ist per kc_lock_path auf den Post-eigenen Ordner beschränkt - Redakteur kann frei navigieren (kein Lock) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -58,8 +58,10 @@ if (!$q || !($contactRow = mysqli_fetch_assoc($q))) {
|
||||
$contactId = (int) $contactRow['id'];
|
||||
$masterMandantId = (int) $contactRow['master_mandant_id'];
|
||||
|
||||
if (get_permission_state('r-wiki', $masterMandantId, $contactId) != 1) {
|
||||
respond_error('Keine Berechtigung (r-wiki).', 403);
|
||||
$hasRwiki = get_permission_state('r-wiki', $masterMandantId, $contactId) == 1;
|
||||
$hasRwikiBr = get_permission_state('r-wiki-br', $masterMandantId, $contactId) == 1;
|
||||
if (!$hasRwiki && !$hasRwikiBr) {
|
||||
respond_error('Keine Berechtigung.', 403);
|
||||
}
|
||||
|
||||
$postId = isset($_POST['post_id']) ? (int) $_POST['post_id'] : 0;
|
||||
@@ -72,6 +74,18 @@ if (!$verifyQ || mysqli_num_rows($verifyQ) === 0) {
|
||||
respond_error('Beitrag existiert nicht.', 404);
|
||||
}
|
||||
|
||||
// Betriebsrat darf Bilder nur in freigegebene Kategorien hochladen
|
||||
if (!$hasRwiki && $hasRwikiBr) {
|
||||
$brRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT COUNT(*) AS cnt FROM knowledgecenter_category_post kcp
|
||||
JOIN knowledgecenter_categories_update kcu ON kcu.id = kcp.category_id
|
||||
WHERE kcp.post_id = $postId AND kcu.betriebsrat_editable = 1");
|
||||
$brRow = mysqli_fetch_assoc($brRes);
|
||||
if (!$brRow || (int)$brRow['cnt'] === 0) {
|
||||
respond_error('Keine Berechtigung für diesen Beitrag.', 403);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($_FILES['file']) || !is_array($_FILES['file'])) {
|
||||
respond_error('Keine Datei empfangen.');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user