Loading data/admin.html +40 −10 Changes for data/admin.html: 40 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -31,14 +31,15 @@ <div id="maintable"> <div id="navbar"> <ul> <li><a href="#" onclick="loadDomains(); return false;">Domains</a></li> <li><a href="#" onclick="loadUsers(); return false;">Users</a></li> <li><a href="#" onclick="loadGroups(); return false;">Groups</a></li> <li><a href="#" onclick="loadClients(); return false;">Clients</a></li> <li><a href="#" onclick="loadServices(); return false;">Services</a></li> <li><a href="#" onclick="loadGpos(); return false;">Policies</a></li> <li><a href="#" onclick="loadSessions(); return false;">Sessions</a></li> <li id="nav-domains" style="display:none"><a href="#" onclick="loadDomains(); return false;">Domains</a></li> <li id="nav-users" style="display:none"><a href="#" onclick="loadUsers(); return false;">Users</a></li> <li id="nav-groups" style="display:none"><a href="#" onclick="loadGroups(); return false;">Groups</a></li> <li id="nav-clients"><a href="#" onclick="loadClients(); return false;">Clients</a></li> <li id="nav-services" style="display:none"><a href="#" onclick="loadServices(); return false;">Services</a></li> <li id="nav-gpos"><a href="#" onclick="loadGpos(); return false;">Policies</a></li> <li id="nav-sessions"><a href="#" onclick="loadSessions(); return false;">Sessions</a></li> <li id="nav-cluster" style="display:none"><a href="#" onclick="loadClusterStatus(); return false;">Cluster</a></li> <li id="nav-export" style="display:none"><a href="#" onclick="loadExport(); return false;">Export/Import</a></li> <li><a href="#" onclick="doLogout(); return false;">Logout</a></li> </ul> </div> Loading @@ -52,6 +53,7 @@ var currentDomain = "admin"; var currentView = null; var g_clusterEnabled = false; var g_permissions = {}; function ajaxGet(url, callback) { var xhr = new XMLHttpRequest(); Loading Loading @@ -1060,14 +1062,42 @@ function doLogout() { /* ---- Initial load ---- */ window.onload = function() { // Check if cluster mode is active, show nav item if so ajaxGet("/settings/admin/api/checkpermissions", function(err, data) { if (!err && data && data.cluster) { if (err || !data) { loadUsers(); return; } g_permissions = data; if (data.cluster) { g_clusterEnabled = true; document.getElementById('nav-cluster').style.display = ''; } }); var gpo = data.gpo || {}; // GPO UUIDs var GPO_MANAGE_USERS = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e02'; var GPO_MANAGE_GROUPS = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e03'; var GPO_MANAGE_SERVICES = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e04'; var GPO_EXPORT_IMPORT = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e05'; if (data.superadmin) { document.getElementById('nav-domains').style.display = ''; } if (data.superadmin || gpo[GPO_MANAGE_USERS]) document.getElementById('nav-users').style.display = ''; if (data.superadmin || gpo[GPO_MANAGE_GROUPS]) document.getElementById('nav-groups').style.display = ''; if (data.superadmin || gpo[GPO_MANAGE_SERVICES]) document.getElementById('nav-services').style.display = ''; if (data.superadmin || gpo[GPO_EXPORT_IMPORT]) document.getElementById('nav-export').style.display = ''; // Auto-set domain for non-SuperAdmins if (!data.superadmin && data.sessiondomain && data.sessiondomain !== 'admin') { currentDomain = data.sessiondomain; } if (data.superadmin || gpo[GPO_MANAGE_USERS]) loadUsers(); else loadSessions(); }); }; </script> </body> Loading src/admin.cpp +10 −1 Changes for src/admin.cpp: 10 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -569,7 +569,8 @@ namespace authdb { /* ---- JSON API: Check Permissions ---- */ void apiCheckPermissions(libhttppp::HttpRequest &curreq, const SessionData *sdat) { json_object *jobj = json_object_new_object(); json_object_object_add(jobj, "superadmin", json_object_new_boolean(isSuperAdmin(sdat))); bool superadmin = isSuperAdmin(sdat); json_object_object_add(jobj, "superadmin", json_object_new_boolean(superadmin)); // Return session domain so frontend knows which domain the user belongs to uuid::uuid sessionDid; Loading @@ -580,6 +581,14 @@ namespace authdb { json_object_object_add(jobj, "sessiondomain", json_object_new_string(sessionDid.c_str())); } // GPO permissions (SuperAdmins get all rights) json_object *jgpo = json_object_new_object(); for (size_t i = 0; gpo_default[i][0] != nullptr; ++i) { bool granted = superadmin || sdat->checkGPO(uuid::uuid(gpo_default[i][0])); json_object_object_add(jgpo, gpo_default[i][0], json_object_new_boolean(granted)); } json_object_object_add(jobj, "gpo", jgpo); // Expose backend type so frontend can restrict domain storage options // 0 = File, 2 = ClusterStore json_object_object_add(jobj, "backendtype", json_object_new_int(_AdminBackend.getType())); Loading Loading
data/admin.html +40 −10 Changes for data/admin.html: 40 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -31,14 +31,15 @@ <div id="maintable"> <div id="navbar"> <ul> <li><a href="#" onclick="loadDomains(); return false;">Domains</a></li> <li><a href="#" onclick="loadUsers(); return false;">Users</a></li> <li><a href="#" onclick="loadGroups(); return false;">Groups</a></li> <li><a href="#" onclick="loadClients(); return false;">Clients</a></li> <li><a href="#" onclick="loadServices(); return false;">Services</a></li> <li><a href="#" onclick="loadGpos(); return false;">Policies</a></li> <li><a href="#" onclick="loadSessions(); return false;">Sessions</a></li> <li id="nav-domains" style="display:none"><a href="#" onclick="loadDomains(); return false;">Domains</a></li> <li id="nav-users" style="display:none"><a href="#" onclick="loadUsers(); return false;">Users</a></li> <li id="nav-groups" style="display:none"><a href="#" onclick="loadGroups(); return false;">Groups</a></li> <li id="nav-clients"><a href="#" onclick="loadClients(); return false;">Clients</a></li> <li id="nav-services" style="display:none"><a href="#" onclick="loadServices(); return false;">Services</a></li> <li id="nav-gpos"><a href="#" onclick="loadGpos(); return false;">Policies</a></li> <li id="nav-sessions"><a href="#" onclick="loadSessions(); return false;">Sessions</a></li> <li id="nav-cluster" style="display:none"><a href="#" onclick="loadClusterStatus(); return false;">Cluster</a></li> <li id="nav-export" style="display:none"><a href="#" onclick="loadExport(); return false;">Export/Import</a></li> <li><a href="#" onclick="doLogout(); return false;">Logout</a></li> </ul> </div> Loading @@ -52,6 +53,7 @@ var currentDomain = "admin"; var currentView = null; var g_clusterEnabled = false; var g_permissions = {}; function ajaxGet(url, callback) { var xhr = new XMLHttpRequest(); Loading Loading @@ -1060,14 +1062,42 @@ function doLogout() { /* ---- Initial load ---- */ window.onload = function() { // Check if cluster mode is active, show nav item if so ajaxGet("/settings/admin/api/checkpermissions", function(err, data) { if (!err && data && data.cluster) { if (err || !data) { loadUsers(); return; } g_permissions = data; if (data.cluster) { g_clusterEnabled = true; document.getElementById('nav-cluster').style.display = ''; } }); var gpo = data.gpo || {}; // GPO UUIDs var GPO_MANAGE_USERS = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e02'; var GPO_MANAGE_GROUPS = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e03'; var GPO_MANAGE_SERVICES = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e04'; var GPO_EXPORT_IMPORT = 'a1b2c3d4-452e-11f0-b1cc-1a2b3c4d5e05'; if (data.superadmin) { document.getElementById('nav-domains').style.display = ''; } if (data.superadmin || gpo[GPO_MANAGE_USERS]) document.getElementById('nav-users').style.display = ''; if (data.superadmin || gpo[GPO_MANAGE_GROUPS]) document.getElementById('nav-groups').style.display = ''; if (data.superadmin || gpo[GPO_MANAGE_SERVICES]) document.getElementById('nav-services').style.display = ''; if (data.superadmin || gpo[GPO_EXPORT_IMPORT]) document.getElementById('nav-export').style.display = ''; // Auto-set domain for non-SuperAdmins if (!data.superadmin && data.sessiondomain && data.sessiondomain !== 'admin') { currentDomain = data.sessiondomain; } if (data.superadmin || gpo[GPO_MANAGE_USERS]) loadUsers(); else loadSessions(); }); }; </script> </body> Loading
src/admin.cpp +10 −1 Changes for src/admin.cpp: 10 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -569,7 +569,8 @@ namespace authdb { /* ---- JSON API: Check Permissions ---- */ void apiCheckPermissions(libhttppp::HttpRequest &curreq, const SessionData *sdat) { json_object *jobj = json_object_new_object(); json_object_object_add(jobj, "superadmin", json_object_new_boolean(isSuperAdmin(sdat))); bool superadmin = isSuperAdmin(sdat); json_object_object_add(jobj, "superadmin", json_object_new_boolean(superadmin)); // Return session domain so frontend knows which domain the user belongs to uuid::uuid sessionDid; Loading @@ -580,6 +581,14 @@ namespace authdb { json_object_object_add(jobj, "sessiondomain", json_object_new_string(sessionDid.c_str())); } // GPO permissions (SuperAdmins get all rights) json_object *jgpo = json_object_new_object(); for (size_t i = 0; gpo_default[i][0] != nullptr; ++i) { bool granted = superadmin || sdat->checkGPO(uuid::uuid(gpo_default[i][0])); json_object_object_add(jgpo, gpo_default[i][0], json_object_new_boolean(granted)); } json_object_object_add(jobj, "gpo", jgpo); // Expose backend type so frontend can restrict domain storage options // 0 = File, 2 = ClusterStore json_object_object_add(jobj, "backendtype", json_object_new_int(_AdminBackend.getType())); Loading