Files
modstagram-back/utils/subUserAuth.js
payacom d4ebc20aa8 reels
2026-10-01 21:12:05 +03:30

41 lines
1.5 KiB
JavaScript

const UserModel = require('../models/UserModel')
// وقتی توکن مالِ یه کاربرِ زیرمجموعه‌ست (is_sub_user)، req.user باید اکانتِ اصلی
// (parent_account_id) باشه — نه خودِ سندِ زیرمجموعه — تا همه‌ی کنترلرهای فعلی
// (پست/کامنت/فروشگاه/...) بدونِ هیچ تغییری محتوا رو به اکانتِ اصلی نسبت بدن.
// req.actingSubUser فقط برای چکِ پرمیژن (requireSubUserPermission) استفاده می‌شه.
// چون این لوکاپ هر بار از دیتابیس تازه انجام می‌شه (نه از خودِ JWT)، غیرفعال‌کردنِ
// یه زیرمجموعه بلافاصله از درخواستِ بعدیش جلوگیری می‌کنه.
async function resolveActingUser (userId) {
const loaded = await UserModel.findById(userId)
if (!loaded) {
return { error: 'NOT_FOUND' }
}
if (!loaded.is_sub_user) {
return { user: loaded, actingSubUser: null, rawUser: loaded }
}
if (loaded.sub_user_active === false) {
return { error: 'SUB_USER_DISABLED' }
}
const parent = loaded.parent_account_id
? await UserModel.findById(loaded.parent_account_id)
: null
if (!parent) {
return { error: 'NOT_FOUND' }
}
return {
user: parent,
rawUser: loaded,
actingSubUser: {
_id: loaded._id,
permissions: loaded.sub_user_permissions || []
}
}
}
module.exports = { resolveActingUser }