reels
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
const UserModel = require('../models/UserModel')
|
||||
const jwt = require('jsonwebtoken')
|
||||
const {
|
||||
expireBlockSuspensionIfNeeded,
|
||||
getBlockedAccountResponse
|
||||
} = require('../utils/blockSuspension')
|
||||
const { resolveActingUser } = require('../utils/subUserAuth')
|
||||
|
||||
module.exports = async (req, res, next) => {
|
||||
try {
|
||||
@@ -27,8 +27,15 @@ module.exports = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
let user = await UserModel.findById(decodedToken.id)
|
||||
if (!user) {
|
||||
const resolved = await resolveActingUser(decodedToken.id)
|
||||
if (resolved.error === 'SUB_USER_DISABLED') {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
message: 'این حساب کاربری غیرفعال شده است'
|
||||
})
|
||||
}
|
||||
if (resolved.error) {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
@@ -36,6 +43,7 @@ module.exports = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
let user = resolved.user
|
||||
user = await expireBlockSuspensionIfNeeded(user)
|
||||
|
||||
const blockResponse = getBlockedAccountResponse(user)
|
||||
@@ -44,6 +52,7 @@ module.exports = async (req, res, next) => {
|
||||
}
|
||||
|
||||
req.user = user
|
||||
req.actingSubUser = resolved.actingSubUser
|
||||
next()
|
||||
} catch (error) {
|
||||
console.error('Error in blockCheck middleware:', error)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
const bodyParser = require('body-parser')
|
||||
const formData = require('express-form-data')
|
||||
const session = require('express-session')
|
||||
const { RedisStore } = require('connect-redis')
|
||||
const { getRedisClient, getRawClient } = require('../utils/redisClient')
|
||||
@@ -49,7 +48,11 @@ function dispatchSession (req, res, next) {
|
||||
}
|
||||
|
||||
module.exports = (app) => {
|
||||
app.use(formData.parse())
|
||||
// express-form-data قبلاً اینجا global و بدون هیچ استثنایی نصب بود — بدنهی هر
|
||||
// درخواست multipart رو (پست/استوری ویدیو و هر آپلودِ دیگه) کامل میخوند و مصرف
|
||||
// میکرد، درحالیکه هیچجای کدبیس از خروجیِ خودش استفاده نمیکرد؛ فقط باعث میشد
|
||||
// وقتی نوبت به multer (همونی که این روتها واقعاً استفاده میکنن) میرسید، دیگه
|
||||
// هیچ بایتی از بدنه باقی نمونده باشه (busboy با «Unexpected end of form» شکست میخورد)
|
||||
app.use(bodyParser.json())
|
||||
app.use(bodyParser.urlencoded({ extended: true }))
|
||||
app.use(dispatchSession)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const UserModel = require('../models/UserModel')
|
||||
const jwt = require('jsonwebtoken')
|
||||
const {
|
||||
canUseProjects,
|
||||
respondProjectProfileIncomplete,
|
||||
} = require('../utils/projectProfile')
|
||||
const { resolveActingUser } = require('../utils/subUserAuth')
|
||||
|
||||
/** حداقل ثبتنام برای پروژه: نام کاربری + نام */
|
||||
module.exports = async (req, res, next) => {
|
||||
@@ -28,8 +28,15 @@ module.exports = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
const user = await UserModel.findById(decodedToken.id)
|
||||
if (!user) {
|
||||
const resolved = await resolveActingUser(decodedToken.id)
|
||||
if (resolved.error === 'SUB_USER_DISABLED') {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
message: 'این حساب کاربری غیرفعال شده است',
|
||||
})
|
||||
}
|
||||
if (resolved.error) {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
@@ -37,11 +44,12 @@ module.exports = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
if (!canUseProjects(user)) {
|
||||
if (!canUseProjects(resolved.user)) {
|
||||
return respondProjectProfileIncomplete(res)
|
||||
}
|
||||
|
||||
req.user = user
|
||||
req.user = resolved.user
|
||||
req.actingSubUser = resolved.actingSubUser
|
||||
next()
|
||||
} catch (error) {
|
||||
console.error('isBasicRegister middleware:', error)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const UserModel = require('../models/UserModel') // مسیر درست به مدل کاربر
|
||||
const jwt = require('jsonwebtoken')
|
||||
const { resolveActingUser } = require('../utils/subUserAuth')
|
||||
|
||||
module.exports = async (req, res, next) => {
|
||||
try {
|
||||
@@ -21,19 +21,28 @@ module.exports = async (req, res, next) => {
|
||||
message: 'Your token is not valid!'
|
||||
})
|
||||
}
|
||||
const user = await UserModel.findById(decodedToken.id)
|
||||
if (!user) {
|
||||
const resolved = await resolveActingUser(decodedToken.id)
|
||||
if (resolved.error === 'SUB_USER_DISABLED') {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
message: 'این حساب کاربری غیرفعال شده است'
|
||||
})
|
||||
}
|
||||
if (resolved.error) {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
message: 'Your token is not valid!'
|
||||
})
|
||||
}
|
||||
if (!user.user_name ||
|
||||
!user.first_name ||
|
||||
!user.last_name ||
|
||||
!user.user_type ||
|
||||
!user.password) {
|
||||
|
||||
const rawUser = resolved.rawUser
|
||||
if (!rawUser.user_name ||
|
||||
!rawUser.first_name ||
|
||||
!rawUser.last_name ||
|
||||
(!rawUser.is_sub_user && !rawUser.user_type) ||
|
||||
!rawUser.password) {
|
||||
return res.status(403).send({
|
||||
status: 'error',
|
||||
code: 403,
|
||||
@@ -41,7 +50,8 @@ module.exports = async (req, res, next) => {
|
||||
type: 'not_register'
|
||||
})
|
||||
}
|
||||
req.user = user // کاربر را به درخواست اضافه کنید تا در سایر middleware ها و کنترلرها استفاده شود.
|
||||
req.user = resolved.user // کاربر را به درخواست اضافه کنید تا در سایر middleware ها و کنترلرها استفاده شود.
|
||||
req.actingSubUser = resolved.actingSubUser
|
||||
next()
|
||||
} catch (error) {
|
||||
console.error('not_register middleware:', error)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const UserModel = require('../models/UserModel') // مسیر درست به مدل کاربر
|
||||
const jwt = require('jsonwebtoken')
|
||||
const { resolveActingUser } = require('../utils/subUserAuth')
|
||||
|
||||
module.exports = async (req, res, next) => {
|
||||
try {
|
||||
@@ -23,18 +23,29 @@ module.exports = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
const user = await UserModel.findById(decodedToken.id)
|
||||
if (!user) {
|
||||
const resolved = await resolveActingUser(decodedToken.id)
|
||||
if (resolved.error === 'SUB_USER_DISABLED') {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
message: 'این حساب کاربری غیرفعال شده است'
|
||||
})
|
||||
}
|
||||
if (resolved.error) {
|
||||
return res.status(401).send({
|
||||
status: 'error',
|
||||
code: 401,
|
||||
message: 'Your token is not valid!'
|
||||
})
|
||||
}
|
||||
if (!user.user_name ||
|
||||
!user.first_name ||
|
||||
!user.password ||
|
||||
!user.user_type) {
|
||||
|
||||
// برای زیرمجموعهها user_type معنا نداره (مالِ خودِ اکانتِ اصلیه، نه اونا) —
|
||||
// فقط برای اکانتِ اصلی این فیلد رو چک میکنیم
|
||||
const rawUser = resolved.rawUser
|
||||
if (!rawUser.user_name ||
|
||||
!rawUser.first_name ||
|
||||
!rawUser.password ||
|
||||
(!rawUser.is_sub_user && !rawUser.user_type)) {
|
||||
return res.status(403).send({
|
||||
status: 'error',
|
||||
code: 403,
|
||||
@@ -43,7 +54,8 @@ module.exports = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
req.user = user
|
||||
req.user = resolved.user
|
||||
req.actingSubUser = resolved.actingSubUser
|
||||
next()
|
||||
} catch (error) {
|
||||
console.error('not_register middleware:', error)
|
||||
|
||||
18
middlewares/requireSubUserPermission.js
Normal file
18
middlewares/requireSubUserPermission.js
Normal file
@@ -0,0 +1,18 @@
|
||||
// مطابق middlewares/requirePermission.js (پنل ادمین) ولی برای زیرمجموعههای
|
||||
// کاربرانِ عادی. باید بعد از میدلویری که req.actingSubUser رو ست میکنه
|
||||
// (blockCheck / isRegister / isHalfRegister / isBasicRegister) بیاد.
|
||||
// اگه req.actingSubUser خالی باشه یعنی خودِ صاحبِ اکانته — دسترسیِ کامل داره.
|
||||
module.exports = function requireSubUserPermission (key) {
|
||||
return (req, res, next) => {
|
||||
const actingSubUser = req.actingSubUser
|
||||
if (!actingSubUser) return next()
|
||||
if (Array.isArray(actingSubUser.permissions) && actingSubUser.permissions.includes(key)) {
|
||||
return next()
|
||||
}
|
||||
return res.status(403).json({
|
||||
status: 'error',
|
||||
code: 403,
|
||||
message: 'شما دسترسی انجام این عملیات را ندارید'
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user