From 5329017efaac520566b4cfea0dab05db534b884d Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 18 Feb 2026 16:15:26 +0000 Subject: [PATCH] correctif permissions --- api_v1_channel_permissions.php | 51 ++++-- assets/js/main.js | 192 ++++++++++++++------- assets/pasted-20260218-160633-6ce717d1.png | Bin 0 -> 57346 bytes data/22.participants.json | 2 +- data/3.participants.json | 2 +- index.php | 22 ++- requests.log | 7 + 7 files changed, 187 insertions(+), 89 deletions(-) create mode 100644 assets/pasted-20260218-160633-6ce717d1.png diff --git a/api_v1_channel_permissions.php b/api_v1_channel_permissions.php index a6ce976..b09871c 100644 --- a/api_v1_channel_permissions.php +++ b/api_v1_channel_permissions.php @@ -27,15 +27,27 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { $everyone_role_id = $everyone['id'] ?? 0; } - // Fetch permissions for this channel + // Fetch permissions for this channel (roles and users) $stmt = db()->prepare(" - SELECT cp.*, r.name as role_name, r.color as role_color + SELECT cp.*, r.name as role_name, r.color as role_color, + u.display_name as member_name, u.avatar_url as member_avatar FROM channel_permissions cp - JOIN roles r ON cp.role_id = r.id + LEFT JOIN roles r ON cp.role_id = r.id + LEFT JOIN users u ON cp.user_id = u.id WHERE cp.channel_id = ? "); $stmt->execute([$channel_id]); - $permissions = $stmt->fetchAll(); + $permissions = []; + while($row = $stmt->fetch()) { + if ($row['user_id']) { + $row['display_name'] = $row['member_name'] ?? 'Unknown Member'; + $row['type'] = 'member'; + } else { + $row['display_name'] = $row['role_name'] ?? 'Unknown Role'; + $row['type'] = 'role'; + } + $permissions[] = $row; + } // Check if @everyone is in permissions, if not add it manually to show up by default $has_everyone = false; @@ -54,10 +66,13 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { array_unshift($permissions, [ 'channel_id' => (int)$channel_id, 'role_id' => (int)$everyone_role_id, + 'user_id' => null, 'allow_permissions' => 0, 'deny_permissions' => 0, 'role_name' => $r['name'], - 'role_color' => $r['color'] + 'role_color' => $r['color'], + 'display_name' => $r['name'], + 'type' => 'role' ]); } } @@ -68,10 +83,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($_SERVER['REQUEST_METHOD'] === 'POST') { $channel_id = $data['channel_id'] ?? 0; - $role_id = $data['role_id'] ?? 0; + $role_id = $data['role_id'] ?? null; + $target_user_id = $data['user_id'] ?? null; $allow = $data['allow'] ?? 0; $deny = $data['deny'] ?? 0; + if (!$role_id && !$target_user_id) { + echo json_encode(['success' => false, 'error' => 'Missing role_id or user_id']); + exit; + } + // Check permissions: Owner or MANAGE_CHANNELS or ADMINISTRATOR require_once 'includes/permissions.php'; $stmt = db()->prepare("SELECT server_id FROM channels WHERE id = ?"); @@ -89,11 +110,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($is_owner || $can_manage) { $stmt = db()->prepare(" - INSERT INTO channel_permissions (channel_id, role_id, allow_permissions, deny_permissions) - VALUES (?, ?, ?, ?) + INSERT INTO channel_permissions (channel_id, role_id, user_id, allow_permissions, deny_permissions) + VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE allow_permissions = VALUES(allow_permissions), deny_permissions = VALUES(deny_permissions) "); - $stmt->execute([$channel_id, $role_id, $allow, $deny]); + $stmt->execute([$channel_id, $role_id, $target_user_id, $allow, $deny]); echo json_encode(['success' => true]); } else { echo json_encode(['success' => false, 'error' => 'Unauthorized']); @@ -103,7 +124,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($_SERVER['REQUEST_METHOD'] === 'DELETE') { $channel_id = $data['channel_id'] ?? 0; - $role_id = $data['role_id'] ?? 0; + $role_id = $data['role_id'] ?? null; + $target_user_id = $data['user_id'] ?? null; // Check permissions require_once 'includes/permissions.php'; @@ -121,8 +143,13 @@ if ($_SERVER['REQUEST_METHOD'] === 'DELETE') { Permissions::hasPermission($user_id, $server_id, Permissions::ADMINISTRATOR); if ($is_owner || $can_manage) { - $stmt = db()->prepare("DELETE FROM channel_permissions WHERE channel_id = ? AND role_id = ?"); - $stmt->execute([$channel_id, $role_id]); + if ($role_id !== null) { + $stmt = db()->prepare("DELETE FROM channel_permissions WHERE channel_id = ? AND role_id = ? AND user_id IS NULL"); + $stmt->execute([$channel_id, $role_id]); + } else if ($target_user_id !== null) { + $stmt = db()->prepare("DELETE FROM channel_permissions WHERE channel_id = ? AND user_id = ? AND role_id IS NULL"); + $stmt->execute([$channel_id, $target_user_id]); + } echo json_encode(['success' => true]); } else { echo json_encode(['success' => false, 'error' => 'Unauthorized']); diff --git a/assets/js/main.js b/assets/js/main.js index e26e253..93261ba 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -1069,6 +1069,20 @@ document.addEventListener('DOMContentLoaded', () => { await loadRolesForPermissions(channelId); }); + const searchChannelPerms = document.getElementById('search-channel-perms'); + searchChannelPerms?.addEventListener('input', () => { + const query = searchChannelPerms.value.toLowerCase(); + const items = channelPermissionsRolesList.querySelectorAll('.list-group-item'); + items.forEach(item => { + const name = item.textContent.toLowerCase(); + if (name.includes(query)) { + item.classList.remove('d-none'); + } else { + item.classList.add('d-none'); + } + }); + }); + async function loadChannelPermissions(channelId) { channelPermissionsRolesList.innerHTML = '
Loading...
'; const resp = await fetch(`api_v1_channel_permissions.php?channel_id=${channelId}`); @@ -1081,7 +1095,7 @@ document.addEventListener('DOMContentLoaded', () => { async function loadRolesForPermissions(channelId) { if (!addPermRoleList) return; - addPermRoleList.innerHTML = '
  • Loading roles...
  • '; + addPermRoleList.innerHTML = '
  • Loading...
  • '; try { const resp = await fetch(`api_v1_roles.php?server_id=${activeServerId}`); @@ -1090,57 +1104,73 @@ document.addEventListener('DOMContentLoaded', () => { if (data.success) { addPermRoleList.innerHTML = ''; - // Filter out roles already in overrides - const existingRoleIds = channelPermissionsData.map(p => parseInt(p.role_id)); + // Roles Section + const existingRoleIds = channelPermissionsData.filter(p => p.type === 'role').map(p => parseInt(p.role_id)); const availableRoles = data.roles.filter(role => !existingRoleIds.includes(parseInt(role.id))); - if (availableRoles.length === 0) { - addPermRoleList.innerHTML = '
  • No more roles to add
  • '; - if (window.canManageServer) { - const divider = document.createElement('li'); - divider.innerHTML = ''; - addPermRoleList.appendChild(divider); - const createLink = document.createElement('li'); - createLink.innerHTML = ' Create roles in Server Settings'; - addPermRoleList.appendChild(createLink); - } - return; + if (availableRoles.length > 0) { + const header = document.createElement('li'); + header.innerHTML = ''; + addPermRoleList.appendChild(header); + + availableRoles.forEach(role => { + const li = document.createElement('li'); + li.innerHTML = ` +
    + ${role.name} +
    `; + li.onclick = async (e) => { + e.preventDefault(); + const postResp = await fetch('api_v1_channel_permissions.php', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ channel_id: channelId, role_id: role.id, allow: 0, deny: 0 }) + }); + const postData = await postResp.json(); + if (postData.success) { + await loadChannelPermissions(channelId); + await loadRolesForPermissions(channelId); + selectOverrideItem(role.id, role.name, 'role'); + } + }; + addPermRoleList.appendChild(li); + }); } - // Add Roles section - const header = document.createElement('li'); - header.innerHTML = ''; - addPermRoleList.appendChild(header); + // Members Section + const existingUserIds = channelPermissionsData.filter(p => p.type === 'member').map(p => parseInt(p.user_id)); + const availableMembers = data.members.filter(m => !existingUserIds.includes(parseInt(m.id))); - availableRoles.forEach(role => { - const li = document.createElement('li'); - li.innerHTML = ` -
    - ${role.name} -
    `; - li.onclick = async (e) => { - e.preventDefault(); - const postResp = await fetch('api_v1_channel_permissions.php', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ channel_id: channelId, role_id: role.id, allow: 0, deny: 0 }) - }); - const postData = await postResp.json(); - if (postData.success) { - await loadChannelPermissions(channelId); - await loadRolesForPermissions(channelId); - selectOverrideRole(role.id, role.name); - } else { - alert("Error adding permission: " + (postData.error || "Unknown error")); - } - }; - addPermRoleList.appendChild(li); - }); - } else { - addPermRoleList.innerHTML = `
  • Error: ${data.error || 'Failed to load'}
  • `; + if (availableMembers.length > 0) { + const header = document.createElement('li'); + header.innerHTML = ''; + addPermRoleList.appendChild(header); + + availableMembers.forEach(m => { + const li = document.createElement('li'); + li.innerHTML = ` + + ${m.username} + `; + li.onclick = async (e) => { + e.preventDefault(); + const postResp = await fetch('api_v1_channel_permissions.php', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ channel_id: channelId, user_id: m.id, allow: 0, deny: 0 }) + }); + const postData = await postResp.json(); + if (postData.success) { + await loadChannelPermissions(channelId); + await loadRolesForPermissions(channelId); + selectOverrideItem(m.id, m.username, 'member'); + } + }; + addPermRoleList.appendChild(li); + }); + } } } catch (err) { - addPermRoleList.innerHTML = '
  • Network error
  • '; console.error(err); } } @@ -1148,14 +1178,14 @@ document.addEventListener('DOMContentLoaded', () => { function renderRoleOverridesList(channelId) { channelPermissionsRolesList.innerHTML = ''; if (channelPermissionsData.length === 0) { - channelPermissionsRolesList.innerHTML = '
    No overrides configured for this channel.
    '; + channelPermissionsRolesList.innerHTML = '
    No overrides configured.
    '; return; } - // Sort: @everyone always at top, then by name const sortedData = [...channelPermissionsData].sort((a, b) => { - const nameA = (a.role_name || '').toLowerCase(); - const nameB = (b.role_name || '').toLowerCase(); + if (a.type !== b.type) return a.type === 'role' ? -1 : 1; + const nameA = (a.display_name || '').toLowerCase(); + const nameB = (b.display_name || '').toLowerCase(); const isAEveryone = nameA.includes('everyone'); const isBEveryone = nameB.includes('everyone'); if (isAEveryone && !isBEveryone) return -1; @@ -1165,34 +1195,46 @@ document.addEventListener('DOMContentLoaded', () => { sortedData.forEach(p => { const item = document.createElement('div'); - item.className = `list-group-item list-group-item-action bg-transparent text-white border-0 mb-1 p-2 small d-flex align-items-center ${currentSelectedOverrideRole == p.role_id ? 'active' : ''}`; + const isActive = currentSelectedOverrideRole == (p.type === 'role' ? p.role_id : p.user_id) && currentSelectedOverrideType === p.type; + item.className = `list-group-item list-group-item-action bg-transparent text-white border-0 mb-1 p-2 small d-flex align-items-center ${isActive ? 'active' : ''}`; item.style.cursor = 'pointer'; + + let icon = ''; + if (p.type === 'role') { + icon = `
    `; + } else { + icon = ``; + } + item.innerHTML = ` -
    - ${p.role_name || 'Unknown Role'} + ${icon} + ${p.display_name} `; - item.onclick = () => selectOverrideRole(p.role_id, p.role_name || 'Unknown Role'); + item.onclick = () => selectOverrideItem(p.type === 'role' ? p.role_id : p.user_id, p.display_name, p.type); channelPermissionsRolesList.appendChild(item); }); } - function selectOverrideRole(roleId, roleName) { - currentSelectedOverrideRole = roleId; + let currentSelectedOverrideType = 'role'; + + function selectOverrideItem(id, name, type) { + currentSelectedOverrideRole = id; + currentSelectedOverrideType = type; const channelId = document.getElementById('edit-channel-id').value; - // Update list active state renderRoleOverridesList(channelId); - selectedPermRoleName.textContent = roleName; + selectedPermRoleName.textContent = name; noRoleSelectedView.classList.add('d-none'); channelPermissionsSettings.classList.remove('d-none'); - // Load existing permissions for this role - const p = channelPermissionsData.find(perm => perm.role_id == roleId) || { allow_permissions: 0, deny_permissions: 0 }; + const p = channelPermissionsData.find(perm => { + if (type === 'role') return perm.role_id == id && perm.type === 'role'; + return perm.user_id == id && perm.type === 'member'; + }) || { allow_permissions: 0, deny_permissions: 0 }; - // Update toggles - updateToggleUI(1, p.allow_permissions, p.deny_permissions); // View Channel - updateToggleUI(2, p.allow_permissions, p.deny_permissions); // Send Messages + updateToggleUI(1, p.allow_permissions, p.deny_permissions); + updateToggleUI(2, p.allow_permissions, p.deny_permissions); } function updateToggleUI(bit, allowPerms, denyPerms) { @@ -1212,10 +1254,17 @@ document.addEventListener('DOMContentLoaded', () => { if (!currentSelectedOverrideRole) return; const channelId = document.getElementById('edit-channel-id').value; + const payload = { channel_id: channelId }; + if (currentSelectedOverrideType === 'role') { + payload.role_id = currentSelectedOverrideRole; + } else { + payload.user_id = currentSelectedOverrideRole; + } + await fetch('api_v1_channel_permissions.php', { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ channel_id: channelId, role_id: currentSelectedOverrideRole }) + body: JSON.stringify(payload) }); currentSelectedOverrideRole = null; @@ -1230,11 +1279,17 @@ document.addEventListener('DOMContentLoaded', () => { const bit = parseInt(group.dataset.permBit); const val = e.target.value; const channelId = document.getElementById('edit-channel-id').value; - const roleId = currentSelectedOverrideRole; + const id = currentSelectedOverrideRole; + const type = currentSelectedOverrideType; - let p = channelPermissionsData.find(perm => perm.role_id == roleId); + let p = channelPermissionsData.find(perm => { + if (type === 'role') return perm.role_id == id && perm.type === 'role'; + return perm.user_id == id && perm.type === 'member'; + }); + if (!p) { - p = { role_id: roleId, allow_permissions: 0, deny_permissions: 0 }; + p = { channel_id: channelId, allow_permissions: 0, deny_permissions: 0 }; + if (type === 'role') p.role_id = id; else p.user_id = id; } let allow = parseInt(p.allow_permissions); @@ -1247,10 +1302,13 @@ document.addEventListener('DOMContentLoaded', () => { if (val === 'allow') allow |= bit; if (val === 'deny') deny |= bit; + const payload = { channel_id: channelId, allow, deny }; + if (type === 'role') payload.role_id = id; else payload.user_id = id; + await fetch('api_v1_channel_permissions.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ channel_id: channelId, role_id: roleId, allow, deny }) + body: JSON.stringify(payload) }); // Update local data diff --git a/assets/pasted-20260218-160633-6ce717d1.png b/assets/pasted-20260218-160633-6ce717d1.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd4797bef3a1788440e2a66853e9805e381405a GIT binary patch literal 57346 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 OpR&Bh-9p*>0sj{k=7b;s literal 0 HcmV?d00001 diff --git a/data/22.participants.json b/data/22.participants.json index 3caf8fb..4cd408b 100644 --- a/data/22.participants.json +++ b/data/22.participants.json @@ -1 +1 @@ -{"de65a0b0b1a29c9a":{"id":"de65a0b0b1a29c9a","user_id":2,"name":"swefpifh ᵇʰᶠʳ","avatar_url":"","last_seen":1771343410040}} \ No newline at end of file +{"b2dca0f015f8373d":{"id":"b2dca0f015f8373d","user_id":3,"name":"swefheim","avatar_url":"","last_seen":1771431264239}} \ No newline at end of file diff --git a/data/3.participants.json b/data/3.participants.json index 486a3e1..485c217 100644 --- a/data/3.participants.json +++ b/data/3.participants.json @@ -1 +1 @@ -{"920464469dc771ed":{"id":"920464469dc771ed","user_id":3,"name":"swefheim","avatar_url":"","last_seen":1771343410598}} \ No newline at end of file +{"42293ef053eb80b0":{"id":"42293ef053eb80b0","user_id":2,"name":"swefpifh ᵇʰᶠʳ","avatar_url":"","last_seen":1771431325495}} \ No newline at end of file diff --git a/index.php b/index.php index 3576530..9135172 100644 --- a/index.php +++ b/index.php @@ -1999,14 +1999,20 @@ async function handleSaveUserSettings(btn) {
    Roles / Members - +
    + +
    + +
    +
    +
    diff --git a/requests.log b/requests.log index d8b5db0..1f22491 100644 --- a/requests.log +++ b/requests.log @@ -632,3 +632,10 @@ {"date":"2026-02-17 15:47:36","method":"POST","post":{"avatar_url":"","display_name":"swefpifh \u1d47\u02b0\u1da0\u02b3","theme":"dark","voice_mode":"ptt","voice_ptt_key":"v","voice_vox_threshold":"0.06","dnd_mode":"1","sound_notifications":"1"},"session":{"user_id":2},"user_id":2,"db_success":true} {"date":"2026-02-17 15:48:00","method":"POST","post":{"avatar_url":"","display_name":"swefheim","theme":"light","voice_mode":"vox","voice_ptt_key":"v","voice_vox_threshold":"0","dnd_mode":"0","sound_notifications":"0"},"session":{"user_id":3},"user_id":3,"db_success":true} {"date":"2026-02-17 15:48:41","method":"POST","post":{"avatar_url":"","display_name":"swefpifh \u1d47\u02b0\u1da0\u02b3","theme":"dark","voice_mode":"vox","voice_ptt_key":"v","voice_vox_threshold":"0.06","dnd_mode":"1","sound_notifications":"1"},"session":{"user_id":2},"user_id":2,"db_success":true} +2026-02-18 16:03:28 - GET /?fl_project=38443 - POST: [] +2026-02-18 16:03:33 - GET / - POST: [] +2026-02-18 16:03:54 - GET /index.php?server_id=1&channel_id=3 - POST: [] +2026-02-18 16:04:41 - GET /?server_id=1&channel_id=18 - POST: [] +2026-02-18 16:04:48 - GET /?server_id=1&channel_id=18 - POST: [] +2026-02-18 16:12:25 - GET /?fl_project=38443 - POST: [] +2026-02-18 16:14:55 - GET /?server_id=1&channel_id=18 - POST: []