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({