Fixed users that manage all device groups.

Ylian Saint-Hilaire committed Sep 9, 2020 at 16:17 UTC 33ac5bc783bef31d8cbbfc64aff06c1d22f8d94a
1 file changed +12 -5
webserver.js
+12 -5
@@ -5606,7 +5606,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5606 // Perform user pre-validation
5607 if ((user == null) || (nodeid == null)) { func(null, 0, false); return; } // Invalid user
5608 if (typeof user == 'string') { user = obj.users[user]; }
5609 - if ((user == null) || (user.links == null)) { func(null, 0, false); return; } // No rights
5609 + if (user == null) { func(null, 0, false); return; } // No rights
5610
5611 // Perform node pre-validation
5612 if (obj.common.validateString(nodeid, 0, 128) == false) { func(null, 0, false); return; } // Invalid nodeid
@@ -5623,6 +5623,9 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5623 func(nodes[0], 0xFFFFFFFF, true); return;
5624 }
5625
5626 + // If no links, stop here.
5627 + if (user.links == null) { func(null, 0, false); return; }
5628 +
5629 // Check device link
5630 var rights = 0, visible = false, r = user.links[nodeid];
5631 if (r != null) {
@@ -5668,7 +5671,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5671 // Returns a list of all meshes that this user has some rights too
5672 obj.GetAllMeshWithRights = function (user, rights) {
5673 if (typeof user == 'string') { user = obj.users[user]; }
5671 - if ((user == null) || (user.links == null)) { return []; }
5674 + if (user == null) { return []; }
5675
5676 var r = [];
5677 if ((user.siteadmin == 0xFFFFFFFF) && (parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0)) {
@@ -5677,6 +5680,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5680 for (var i in obj.meshes) { if ((obj.meshes[i]._id.startsWith(meshStartStr)) && (obj.meshes[i].deleted == null)) { r.push(obj.meshes[i]); } }
5681 return r;
5682 }
5683 + if (user.links == null) { return []; }
5684 for (var i in user.links) {
5685 if (i.startsWith('mesh/')) {
5686 // Grant access to a device group thru a direct link
@@ -5705,7 +5709,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5709 // Returns a list of all mesh id's that this user has some rights too
5710 obj.GetAllMeshIdWithRights = function (user, rights) {
5711 if (typeof user == 'string') { user = obj.users[user]; }
5708 - if ((user == null) || (user.links == null)) { return []; }
5712 + if (user == null) { return []; }
5713 var r = [];
5714 if ((user.siteadmin == 0xFFFFFFFF) && (parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0)) {
5715 // This is a super user that can see all device groups for a given domain
@@ -5713,6 +5717,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5717 for (var i in obj.meshes) { if ((obj.meshes[i]._id.startsWith(meshStartStr)) && (obj.meshes[i].deleted == null)) { r.push(obj.meshes[i]._id); } }
5718 return r;
5719 }
5720 + if (user.links == null) { return []; }
5721 for (var i in user.links) {
5722 if (i.startsWith('mesh/')) {
5723 // Grant access to a device group thru a direct link
@@ -5742,7 +5747,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5747 obj.GetMeshRights = function (user, mesh) {
5748 if ((user == null) || (mesh == null)) { return 0; }
5749 if (typeof user == 'string') { user = obj.users[user]; }
5745 - if ((user == null) || (user.links == null)) { return 0; }
5750 + if (user == null) { return 0; }
5751 var r, meshid;
5752 if (typeof mesh == 'string') {
5753 meshid = mesh;
@@ -5754,6 +5759,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5759 if ((user.siteadmin == 0xFFFFFFFF) && (parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0) && (meshid.startsWith('mesh/' + user.domain + '/'))) { return 0xFFFFFFFF; }
5760
5761 // Check direct user to device group permissions
5762 + if (user.links == null) return 0;
5763 var rights = 0;
5764 r = user.links[meshid];
5765 if (r != null) {
@@ -5786,7 +5792,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5792 obj.IsMeshViewable = function (user, mesh) {
5793 if ((user == null) || (mesh == null)) { return false; }
5794 if (typeof user == 'string') { user = obj.users[user]; }
5789 - if ((user == null) || (user.links == null)) { return false; }
5795 + if (user == null) { return false; }
5796 var meshid;
5797 if (typeof mesh == 'string') {
5798 meshid = mesh;
@@ -5798,6 +5804,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5804 if ((user.siteadmin == 0xFFFFFFFF) && (parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0) && (meshid.startsWith('mesh/' + user.domain + '/'))) { return true; }
5805
5806 // Check direct user to device group permissions
5807 + if (user.links == null) { return false; }
5808 if (user.links[meshid] != null) { return true; } // If the user has a direct link, stop here.
5809
5810 // Check if we are part of any user groups that would give this user visibility to this device group.