@budibase/backend-core 2.11.44 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +61 -48
- package/dist/index.js.map +3 -3
- package/dist/index.js.meta.json +1 -1
- package/dist/package.json +4 -4
- package/dist/plugins.js.meta.json +1 -1
- package/dist/src/cache/writethrough.d.ts +1 -1
- package/dist/src/cache/writethrough.js +2 -2
- package/dist/src/cache/writethrough.js.map +1 -1
- package/dist/src/security/roles.d.ts +4 -1
- package/dist/src/security/roles.js +8 -5
- package/dist/src/security/roles.js.map +1 -1
- package/dist/src/users/db.d.ts +1 -1
- package/dist/src/users/db.js +11 -4
- package/dist/src/users/db.js.map +1 -1
- package/dist/src/users/users.d.ts +1 -1
- package/dist/tests/core/utilities/structures/licenses.js +8 -0
- package/dist/tests/core/utilities/structures/licenses.js.map +1 -1
- package/package.json +4 -4
- package/src/cache/writethrough.ts +2 -2
- package/src/security/roles.ts +14 -5
- package/src/users/db.ts +62 -46
- package/src/users/users.ts +1 -1
- package/tests/core/users/users.spec.js +54 -0
- package/tests/core/utilities/structures/licenses.ts +8 -0
package/dist/index.js
CHANGED
|
@@ -9983,7 +9983,8 @@ var UserDB = class _UserDB {
|
|
|
9983
9983
|
}
|
|
9984
9984
|
}
|
|
9985
9985
|
const change = dbUser ? 0 : 1;
|
|
9986
|
-
|
|
9986
|
+
const creatorsChange = isCreator2(dbUser) !== isCreator2(user) ? 1 : 0;
|
|
9987
|
+
return _UserDB.quotas.addUsers(change, creatorsChange, async () => {
|
|
9987
9988
|
await validateUniqueUser(email, tenantId);
|
|
9988
9989
|
let builtUser = await _UserDB.buildUser(user, opts, tenantId, dbUser);
|
|
9989
9990
|
if (opts.currentUserId && opts.currentUserId === dbUser?._id) {
|
|
@@ -10027,6 +10028,7 @@ var UserDB = class _UserDB {
|
|
|
10027
10028
|
const tenantId = getTenantId();
|
|
10028
10029
|
let usersToSave = [];
|
|
10029
10030
|
let newUsers = [];
|
|
10031
|
+
let newCreators = [];
|
|
10030
10032
|
const emails = newUsersRequested.map((user) => user.email);
|
|
10031
10033
|
const existingEmails = await searchExistingEmails(emails);
|
|
10032
10034
|
const unsuccessful = [];
|
|
@@ -10042,49 +10044,56 @@ var UserDB = class _UserDB {
|
|
|
10042
10044
|
}
|
|
10043
10045
|
newUser.userGroups = groups;
|
|
10044
10046
|
newUsers.push(newUser);
|
|
10047
|
+
if (isCreator2(newUser)) {
|
|
10048
|
+
newCreators.push(newUser);
|
|
10049
|
+
}
|
|
10045
10050
|
}
|
|
10046
10051
|
const account = await getAccountByTenantId(tenantId);
|
|
10047
|
-
return _UserDB.quotas.addUsers(
|
|
10048
|
-
newUsers.
|
|
10049
|
-
|
|
10050
|
-
|
|
10051
|
-
|
|
10052
|
-
|
|
10053
|
-
|
|
10054
|
-
|
|
10055
|
-
|
|
10056
|
-
|
|
10057
|
-
|
|
10058
|
-
|
|
10059
|
-
|
|
10060
|
-
|
|
10061
|
-
|
|
10062
|
-
|
|
10063
|
-
|
|
10064
|
-
|
|
10065
|
-
|
|
10066
|
-
await
|
|
10067
|
-
await
|
|
10068
|
-
|
|
10069
|
-
|
|
10052
|
+
return _UserDB.quotas.addUsers(
|
|
10053
|
+
newUsers.length,
|
|
10054
|
+
newCreators.length,
|
|
10055
|
+
async () => {
|
|
10056
|
+
newUsers.forEach((user) => {
|
|
10057
|
+
usersToSave.push(
|
|
10058
|
+
_UserDB.buildUser(
|
|
10059
|
+
user,
|
|
10060
|
+
{
|
|
10061
|
+
hashPassword: true,
|
|
10062
|
+
requirePassword: user.requirePassword
|
|
10063
|
+
},
|
|
10064
|
+
tenantId,
|
|
10065
|
+
void 0,
|
|
10066
|
+
// no dbUser
|
|
10067
|
+
account
|
|
10068
|
+
)
|
|
10069
|
+
);
|
|
10070
|
+
});
|
|
10071
|
+
const usersToBulkSave = await Promise.all(usersToSave);
|
|
10072
|
+
await bulkUpdateGlobalUsers(usersToBulkSave);
|
|
10073
|
+
for (const user of usersToBulkSave) {
|
|
10074
|
+
await users_exports.addUser(tenantId, user._id, user.email);
|
|
10075
|
+
await handleSaveEvents(user, void 0);
|
|
10076
|
+
}
|
|
10077
|
+
const saved = usersToBulkSave.map((user) => {
|
|
10078
|
+
return {
|
|
10079
|
+
_id: user._id,
|
|
10080
|
+
email: user.email
|
|
10081
|
+
};
|
|
10082
|
+
});
|
|
10083
|
+
if (Array.isArray(saved) && groups) {
|
|
10084
|
+
const groupPromises = [];
|
|
10085
|
+
const createdUserIds = saved.map((user) => user._id);
|
|
10086
|
+
for (let groupId of groups) {
|
|
10087
|
+
groupPromises.push(_UserDB.groups.addUsers(groupId, createdUserIds));
|
|
10088
|
+
}
|
|
10089
|
+
await Promise.all(groupPromises);
|
|
10090
|
+
}
|
|
10070
10091
|
return {
|
|
10071
|
-
|
|
10072
|
-
|
|
10092
|
+
successful: saved,
|
|
10093
|
+
unsuccessful
|
|
10073
10094
|
};
|
|
10074
|
-
});
|
|
10075
|
-
if (Array.isArray(saved) && groups) {
|
|
10076
|
-
const groupPromises = [];
|
|
10077
|
-
const createdUserIds = saved.map((user) => user._id);
|
|
10078
|
-
for (let groupId of groups) {
|
|
10079
|
-
groupPromises.push(_UserDB.groups.addUsers(groupId, createdUserIds));
|
|
10080
|
-
}
|
|
10081
|
-
await Promise.all(groupPromises);
|
|
10082
10095
|
}
|
|
10083
|
-
|
|
10084
|
-
successful: saved,
|
|
10085
|
-
unsuccessful
|
|
10086
|
-
};
|
|
10087
|
-
});
|
|
10096
|
+
);
|
|
10088
10097
|
}
|
|
10089
10098
|
static async bulkDelete(userIds) {
|
|
10090
10099
|
const db = getGlobalDB();
|
|
@@ -10115,10 +10124,11 @@ var UserDB = class _UserDB {
|
|
|
10115
10124
|
_deleted: true
|
|
10116
10125
|
}));
|
|
10117
10126
|
const dbResponse = await bulkUpdateGlobalUsers(toDelete);
|
|
10118
|
-
|
|
10127
|
+
const creatorsToDelete = usersToDelete.filter(isCreator2);
|
|
10119
10128
|
for (let user of usersToDelete) {
|
|
10120
10129
|
await bulkDeleteProcessing(user);
|
|
10121
10130
|
}
|
|
10131
|
+
await _UserDB.quotas.removeUsers(toDelete.length, creatorsToDelete.length);
|
|
10122
10132
|
const userIndex = {};
|
|
10123
10133
|
usersToDelete.reduce((prev, current) => {
|
|
10124
10134
|
prev[current._id] = current;
|
|
@@ -10155,7 +10165,8 @@ var UserDB = class _UserDB {
|
|
|
10155
10165
|
}
|
|
10156
10166
|
await users_exports.removeUser(dbUser);
|
|
10157
10167
|
await db.remove(userId, dbUser._rev);
|
|
10158
|
-
|
|
10168
|
+
const creatorsToDelete = isCreator2(dbUser) ? 1 : 0;
|
|
10169
|
+
await _UserDB.quotas.removeUsers(1, creatorsToDelete);
|
|
10159
10170
|
await handleDeleteEvents(dbUser);
|
|
10160
10171
|
await user_exports.invalidateUser(userId);
|
|
10161
10172
|
await invalidateSessions(userId, { reason: "deletion" });
|
|
@@ -10361,8 +10372,8 @@ var Writethrough = class {
|
|
|
10361
10372
|
this.db = db;
|
|
10362
10373
|
this.writeRateMs = writeRateMs;
|
|
10363
10374
|
}
|
|
10364
|
-
async put(doc) {
|
|
10365
|
-
return put(this.db, doc,
|
|
10375
|
+
async put(doc, writeRateMs = this.writeRateMs) {
|
|
10376
|
+
return put(this.db, doc, writeRateMs);
|
|
10366
10377
|
}
|
|
10367
10378
|
async get(id) {
|
|
10368
10379
|
return get3(this.db, id);
|
|
@@ -10978,7 +10989,9 @@ async function roleToNumber(id) {
|
|
|
10978
10989
|
if (isBuiltin(id)) {
|
|
10979
10990
|
return builtinRoleToNumber(id);
|
|
10980
10991
|
}
|
|
10981
|
-
const hierarchy = await getUserRoleHierarchy(id
|
|
10992
|
+
const hierarchy = await getUserRoleHierarchy(id, {
|
|
10993
|
+
defaultPublic: true
|
|
10994
|
+
});
|
|
10982
10995
|
for (let role of hierarchy) {
|
|
10983
10996
|
if (isBuiltin(role?.inherits)) {
|
|
10984
10997
|
return builtinRoleToNumber(role.inherits) + 1;
|
|
@@ -11022,11 +11035,11 @@ async function getRole(roleId, opts) {
|
|
|
11022
11035
|
}
|
|
11023
11036
|
return role;
|
|
11024
11037
|
}
|
|
11025
|
-
async function getAllUserRoles(userRoleId) {
|
|
11038
|
+
async function getAllUserRoles(userRoleId, opts) {
|
|
11026
11039
|
if (userRoleId === BUILTIN_IDS.ADMIN) {
|
|
11027
11040
|
return getAllRoles();
|
|
11028
11041
|
}
|
|
11029
|
-
let currentRole = await getRole(userRoleId);
|
|
11042
|
+
let currentRole = await getRole(userRoleId, opts);
|
|
11030
11043
|
let roles = currentRole ? [currentRole] : [];
|
|
11031
11044
|
let roleIds = [userRoleId];
|
|
11032
11045
|
while (currentRole && currentRole.inherits && roleIds.indexOf(currentRole.inherits) === -1) {
|
|
@@ -11042,8 +11055,8 @@ async function getUserRoleIdHierarchy(userRoleId) {
|
|
|
11042
11055
|
const roles = await getUserRoleHierarchy(userRoleId);
|
|
11043
11056
|
return roles.map((role) => role._id);
|
|
11044
11057
|
}
|
|
11045
|
-
async function getUserRoleHierarchy(userRoleId) {
|
|
11046
|
-
return getAllUserRoles(userRoleId);
|
|
11058
|
+
async function getUserRoleHierarchy(userRoleId, opts) {
|
|
11059
|
+
return getAllUserRoles(userRoleId, opts);
|
|
11047
11060
|
}
|
|
11048
11061
|
function checkForRoleResourceArray(rolePerms, resourceId) {
|
|
11049
11062
|
if (rolePerms && !Array.isArray(rolePerms[resourceId])) {
|