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:
2026-06-26 13:16:36 +02:00
parent 07f9f304a4
commit a0698d621e
8 changed files with 168 additions and 27 deletions

View File

@@ -829,7 +829,6 @@ if (isset($_GET[$c_form]) && !empty($_POST)) {
// Helper-Funktion zur Berechtigungsprüfung
function require_permission($permissionCode)
{
// Hier nehmen wir an, dass $GLOBALS["main_contact"] korrekt gesetzt ist
if (
get_permission_state(
$permissionCode,
@@ -842,6 +841,32 @@ function require_permission($permissionCode)
}
}
// Prüft, ob der User voller Wiki-Redakteur ist (r-wiki)
function is_wiki_redakteur(): bool
{
return get_permission_state('r-wiki', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1;
}
// Prüft, ob der User Betriebsrat-Wiki-Recht hat (r-wiki-br)
function is_wiki_betriebsrat(): bool
{
return get_permission_state('r-wiki-br', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1;
}
// Prüft, ob der User irgendeins der Wiki-Bearbeitungsrechte hat
function has_wiki_edit_permission(): bool
{
return is_wiki_redakteur() || is_wiki_betriebsrat();
}
function require_wiki_edit_permission(): void
{
if (!has_wiki_edit_permission()) {
echo "Sie haben nicht die notwendigen Berechtigungen, um diese Seite zu sehen.";
exit;
}
}
// Switch-Case für die verschiedenen Aktionen
$action = $_GET["action"] ?? "List";
switch ($action) {
@@ -850,6 +875,7 @@ switch ($action) {
require_once(__DIR__ . '/../Installation/Installation.php');
break;
case "Categories":
// Kategorieverwaltung nur für vollständige Redakteure
if (isset($_GET['detail'])) {
require_permission('r-wiki');
require_once(__DIR__ . '/../Views/categories_cardform.php');
@@ -859,7 +885,8 @@ switch ($action) {
}
break;
case "PostList":
require_permission('r-wiki');
// Betriebsrat darf die Post-Liste sehen (gefiltert auf seine Kategorien)
require_wiki_edit_permission();
require_once(__DIR__ . '/../Views/post_listform.php');
break;
case "Post":
@@ -870,7 +897,8 @@ switch ($action) {
require_once(__DIR__ . '/../Import/Import.php');
break;
case "NewPost":
require_permission('r-wiki');
// Betriebsrat darf neue Posts erstellen (nur in freigegebenen Kategorien)
require_wiki_edit_permission();
$_GET['new'] = 1;
require_once(__DIR__ . '/../Views/post_cardform.php');
break;