Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
02af33f
Made edits to save changes to default role permissions of a user, and…
AnthonyWeathers Jun 5, 2025
a123187
Merge branch 'development' into Anthony/Added-PermissionChanges-For-D…
AnthonyWeathers Jun 9, 2025
e84998c
package-lock.json update after npm i with git merge
AnthonyWeathers Jun 9, 2025
b50e0e7
Merge branch 'development' into Anthony/Added-PermissionChanges-For-D…
AnthonyWeathers Jun 19, 2025
716e626
chore: merged development into branch
AnthonyWeathers Sep 5, 2025
33f7dc2
refactor: added removedRolePermissions to change log model, and rewor…
AnthonyWeathers Sep 6, 2025
16bbb28
chore: merged development into branch
AnthonyWeathers Oct 6, 2025
d313366
refactor: updated condition check for removedPermissions, and added d…
AnthonyWeathers Oct 7, 2025
f6681f8
chore: merged development into branch
AnthonyWeathers Oct 9, 2025
600ef9f
chore: merged development into branch
AnthonyWeathers Oct 13, 2025
01a26d3
chore: merged development
AnthonyWeathers Nov 18, 2025
2cbd28d
chore: merged latest development for merge conflicts
AnthonyWeathers Dec 12, 2025
7382520
refactor: added comments identifying current issue with feature to fix
AnthonyWeathers Dec 12, 2025
e16b81c
chore: merged development
AnthonyWeathers Dec 14, 2025
a4a75f4
chore: merged development
AnthonyWeathers Dec 21, 2025
48ce932
chore: merged development
AnthonyWeathers Dec 31, 2025
dde3bef
refactor: added reason value to user change logs and made adjustments…
AnthonyWeathers Dec 31, 2025
1e6f307
refactor: removed commented code from branch that had been removed al…
AnthonyWeathers Dec 31, 2025
8073791
chore: merged development for latest changes
AnthonyWeathers Jan 11, 2026
0742c53
chore: merged development
AnthonyWeathers Jan 12, 2026
ffb3e09
chore: merged development for latest changes
AnthonyWeathers Jan 17, 2026
42ef510
chore: merged development
AnthonyWeathers Jan 20, 2026
18e602e
chore: merged development
AnthonyWeathers Jan 23, 2026
3d5e2b3
chore: merged development
AnthonyWeathers Feb 4, 2026
5fbb126
chore: merged latest development
AnthonyWeathers Feb 10, 2026
90ecc45
chore: merged latest development changes
AnthonyWeathers Feb 25, 2026
1901593
chore: merged newest changes from development
AnthonyWeathers Feb 26, 2026
d9a9f57
chore: merged development into branch
AnthonyWeathers Mar 1, 2026
ffec0f7
chore: merged development for changes
AnthonyWeathers Mar 5, 2026
570cb07
refactor: fixed use of .sort to include a compare function and added …
AnthonyWeathers Mar 5, 2026
4c36e01
chore: merged development changes and kept some changes I made that w…
AnthonyWeathers Mar 17, 2026
995f590
chore: merged development
AnthonyWeathers Mar 22, 2026
1d80d17
refactor: removed previously added value that is not used and removed…
AnthonyWeathers Mar 22, 2026
32dbe07
chore: merged development
AnthonyWeathers Apr 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions src/models/userPermissionChangeLog.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ const { Schema } = mongoose;

const User = require('./userProfile');


const UserPermissionChangeLog = new Schema({
logDateTime: { type: String, required: true },
userId: {
Expand All @@ -14,10 +13,16 @@ const UserPermissionChangeLog = new Schema({
},
individualName: { type: String },
permissions: { type: [String], required: true },
removedRolePermissions: { type: [String], default: [] },
permissionsAdded: { type: [String], default: [] },
permissionsRemoved: { type: [String], default: [] },
requestorRole: { type: String },
requestorEmail: { type: String, required: true },
reason: { type: String, default: '' },
});

module.exports = mongoose.model('UserPermissionChangeLog', UserPermissionChangeLog, 'UserPermissionChangeLogs');
module.exports = mongoose.model(
'UserPermissionChangeLog',
UserPermissionChangeLog,
'UserPermissionChangeLogs',
);
58 changes: 42 additions & 16 deletions src/utilities/logUserPermissionChangeByAccount.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,49 +18,73 @@

//

const checkPermissionArray = (permArray) => (Array.isArray(permArray) ? permArray : []);

const logUserPermissionChangeByAccount = async (req, user) => {
const { permissions, requestor } = req.body;
const { permissions, requestor, reason } = req.body;
const dateTime = moment().tz('America/Los_Angeles').format();

try {
if (!permissions || !requestor?.requestorId) {
return;
}

const Permissions = Array.isArray(permissions.frontPermissions)
? permissions.frontPermissions
: [];
const { userId } = req.params;

// Fetch requestor email (may be null if requestor deleted)
const requestorDoc = await UserProfile.findById(requestor.requestorId)
.select('email')
.lean()
.exec();
const requestorEmail = requestorDoc?.email ?? 'unknown';

const { firstName, lastName } = user;
// const { firstName, lastName } = user;

Check warning on line 39 in src/utilities/logUserPermissionChangeByAccount.js

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this commented out code.

See more on https://sonarcloud.io/project/issues?id=OneCommunityGlobal_HGNRest&issues=AZ0XcnZXEnrKnygjGbRH&open=AZ0XcnZXEnrKnygjGbRH&pullRequest=1447
let permissionsAdded = [];
let permissionsRemoved = [];
let roleChanged = false;
const { userId } = req.params;
const Permissions = checkPermissionArray(permissions.frontPermissions);
const removedPermissions = checkPermissionArray(permissions.removedDefaultPermissions); // removed default permissions
const rolePermissions = checkPermissionArray(permissions.defaultPermissions); // default permissions for user provided by their role
const changedPermissions = [...Permissions, ...removedPermissions];

// Use the user object passed from controller (already fetched)
const { firstName, lastName } = user;

const document = await findLatestRelatedLog(userId);

if (document) {
const docPermissions = Array.isArray(document.permissions) ? document.permissions : [];
// const sortedDoc = [...docPermissions].sort();
const sortedDoc = [...docPermissions].sort((a, b) => a.localeCompare(b));
// const sortedCurrent = [...Permissions].sort();
const sortedCurrent = [...Permissions].sort((a, b) => a.localeCompare(b));
if (JSON.stringify(sortedDoc) === JSON.stringify(sortedCurrent)) {
const docPermissions = checkPermissionArray(document.permissions);
const docRemovedRolePermissions = checkPermissionArray(document.removedRolePermissions);
roleChanged = reason.includes('Role Changed');
const docSavedChanges = [...docPermissions, ...docRemovedRolePermissions];
const sortedSaved = [...docSavedChanges].sort((a, b) => a.localeCompare(b));
const sortedChanged = [...changedPermissions].sort((a, b) => a.localeCompare(b));
// no new changes in permissions list from last update and no role change
if (
sortedSaved.length === sortedChanged.length &&
sortedSaved.every((value, index) => value === sortedChanged[index]) &&
!roleChanged
) {
return;
}
permissionsRemoved = docPermissions.filter((item) => !Permissions.includes(item));
permissionsAdded = Permissions.filter((item) => !docPermissions.includes(item));
permissionsRemoved = [
...removedPermissions.filter((item) => !docRemovedRolePermissions.includes(item)), // saves new removed role defaults
...docPermissions.filter(
(item) => !Permissions.includes(item) && !rolePermissions.includes(item),
), // removed user added permissions
];
permissionsAdded = [
...Permissions.filter((item) => !docPermissions.includes(item)), // saves new added permissions
...docRemovedRolePermissions.filter(
(item) => !removedPermissions.includes(item) && rolePermissions.includes(item),
), // removed role permissions added back
];
} else {
permissionsAdded = Permissions;
permissionsRemoved = removedPermissions; // adds removed default permissions to permissionsRemoved for inital log
}

if (permissionsRemoved.length === 0 && permissionsAdded.length === 0) {
// no permission added nor removed nor role change
if (permissionsRemoved.length === 0 && permissionsAdded.length === 0 && !roleChanged) {
return;
}

Expand All @@ -69,9 +93,11 @@
userId,
individualName: `INDIVIDUAL: ${firstName} ${lastName}`,
permissions: Permissions,
removedRolePermissions: removedPermissions,
permissionsAdded,
permissionsRemoved,
requestorRole: requestor.role,
reason,
requestorEmail,
});

Expand Down
Loading