I've found the problem. (It has nothing to do with user/group/privileges.)
The programmer who wrote the node originally, declared a variable of an 'i2c-bus' instead of 'i2c'.
A bus can not have a "sub-bus".
This is the right way to handle it:
const i2c = global.get('i2c');
const aBus = i2c.open(11, err => {
if (err) {
throw err;
}
...
Here is an example to list the possible/supported functions of an I2C bus:
[{"id":"1d042afc.dc4755","type":"function","z":"34aad6f7.b85c6a","name":"I2C Functionalities scan","func":"'use strict';\n\n// When run, this program will output the same information as the\n// command 'i2cdetect -F 1'\n//const i2c = global.require('i2c');\nconst i2c = global.get('i2c');\nconst BusNumber = 1;\nconst aBus = i2c.open(BusNumber, err => {\n if (err) {\n throw err;\n }\n\n node.debug('i2c Bus opened successful.');\n \n aBus.i2cFuncs((err, i2cFuncs) => {\n const boolToYesNo = bool => bool ? 'yes' : 'no';\n\n if (err) {\n throw err;\n }\n\n console.log('Functionalities implemented by /dev/i2c-11:');\n console.log('I2C ' + boolToYesNo(i2cFuncs.i2c));\n console.log('SMBus Quick Command ' + boolToYesNo(i2cFuncs.smbusQuick));\n console.log('SMBus Send Byte ' + boolToYesNo(i2cFuncs.smbusSendByte));\n console.log('SMBus Receive Byte ' + boolToYesNo(i2cFuncs.smbusReceiveByte));\n console.log('SMBus Write Byte ' + boolToYesNo(i2cFuncs.smbusWriteByte));\n console.log('SMBus Read Byte ' + boolToYesNo(i2cFuncs.smbusReadByte));\n console.log('SMBus Write Word ' + boolToYesNo(i2cFuncs.smbusWriteWord));\n console.log('SMBus Read Word ' + boolToYesNo(i2cFuncs.smbusReadWord));\n console.log('SMBus Process Call ' + boolToYesNo(i2cFuncs.smbusProcCall));\n console.log('SMBus Block Write ' + boolToYesNo(i2cFuncs.smbusWriteBlock));\n console.log('SMBus Block Read ' + boolToYesNo(i2cFuncs.smbusReadBlock));\n console.log('SMBus Block Process Call ' + boolToYesNo(i2cFuncs.smbusBlockProcCall));\n console.log('SMBus PEC ' + boolToYesNo(i2cFuncs.smbusPec));\n console.log('I2C Block Write ' + boolToYesNo(i2cFuncs.smbusWriteI2cBlock));\n console.log('I2C Block Read ' + boolToYesNo(i2cFuncs.smbusReadI2cBlock));\n });\n});\n\nreturn aBus;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":370,"y":600,"wires":[["6300686f.7c8ca"]]},{"id":"6300686f.7c8ca","type":"debug","z":"34aad6f7.b85c6a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":600,"wires":[]},{"id":"351e5767.889d5","type":"inject","z":"34aad6f7.b85c6a","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":180,"y":600,"wires":[["1d042afc.dc4755"]]}]