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.