From ecbdfb97c19c2e5657e7a49f5cb43e827515c150 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Thu, 20 Aug 2026 19:35:28 +0100 Subject: [PATCH] Add caching for user permissions in Redis - Introduced utility functions to save user permissions to Redis, enhancing performance by reducing database load. - Updated user schema to call the new caching function during permission recalculation, ensuring permissions are stored efficiently. - Improved overall permission management by integrating Redis caching into the existing permission handling workflow. --- src/database/permissions.js | 11 +++++++++++ src/database/schemas/management/user.schema.js | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/database/permissions.js b/src/database/permissions.js index 45f30e1..5af91a1 100644 --- a/src/database/permissions.js +++ b/src/database/permissions.js @@ -1,4 +1,15 @@ import mongoose from 'mongoose'; +import { redisServer } from './redis.js'; + +export const getUserPermissionsCacheKey = (userId) => `permissions:${userId}`; + +export const saveUserPermissionsToRedis = async (userId, permissions = {}) => { + if (!userId) { + return; + } + + await redisServer.setKey(getUserPermissionsCacheKey(userId), permissions || {}); +}; export const applyPermissionSettingsList = (settingsList = []) => { const permissions = {}; diff --git a/src/database/schemas/management/user.schema.js b/src/database/schemas/management/user.schema.js index 0112da3..8233075 100644 --- a/src/database/schemas/management/user.schema.js +++ b/src/database/schemas/management/user.schema.js @@ -4,6 +4,7 @@ import { applyPermissionSettingsList, resolvePermissionSettings, resolveReferencedDocs, + saveUserPermissionsToRedis, } from '../../permissions.js'; const { Schema } = mongoose; @@ -47,6 +48,7 @@ userSchema.statics.recalculate = async function (user, actingUser) { if (user && typeof user === 'object' && !user._bsontype) { user.permissions = permissions; } + await saveUserPermissionsToRedis(userId, permissions); const { editObject } = await import('../../database.js'); await editObject({