41 lines
1.5 KiB
JavaScript
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 }
|