reels
This commit is contained in:
40
utils/subUserAuth.js
Normal file
40
utils/subUserAuth.js
Normal file
@@ -0,0 +1,40 @@
|
||||
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 }
|
||||
Reference in New Issue
Block a user