- ورود با شماره تماس و رمز عبور (JWT)
- نقش مدیر و کاربر عادی
- مدیر میتواند گروه و کاربر بسازد (نام کاربری = شماره تماس)
- تعیین دسترسی فرم بهازای هر کاربر یا هر گروه
- رمزنگاری AES-256-GCM برای دادههای پاسخ فرمها (form_submissions) و رمزهای عبور با bcrypt
- هدرهای امنیتی با helmet و محدودیت تلاش ورود (rate limit)
- ظاهر جدید با نوار بالای شیشهای، گرادیان و منوی کاربر
cd backend
npm install
cp .env.example .env
# مقدار JWT_SECRET و ENCRYPTION_KEY را در .env عوض کنید:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
npm startدر اولین اجرا یک کاربر مدیر پیشفرض ساخته میشود (شماره و رمز در کنسول چاپ میشود یا از DEFAULT_ADMIN_PHONE/DEFAULT_ADMIN_PASSWORD در .env خوانده میشود). بلافاصله بعد از اولین ورود رمز را عوض کنید.
cd frontend
npm install
npm run dev- مدیر همهی فرمها را میبیند و میسازد.
- کاربر عادی فقط فرمهایی را میبیند که:
- مستقیماً به او اختصاص داده شده (form_user_permissions)، یا
- گروه او به آن فرم دسترسی دارد (form_group_permissions)
- لینک عمومی هر فرم (
/f/:id) بدون نیاز به ورود قابل پر شدن است؛ این برای کسانی است که قرار است فرم را پر کنند، نه مدیریتش کنند.
- حتماً
JWT_SECRETوENCRYPTION_KEYرا با مقادیر تصادفی و طولانی جایگزین کنید (مقادیر نمونه فقط برای تست هستند). - در سرور واقعی پروژه را پشت HTTPS قرار دهید.
- اگر
ENCRYPTION_KEYرا بعداً عوض کنید، پاسخهای قبلاً ذخیرهشده دیگر رمزگشایی نمیشوند؛ کلید را جایی امن نگه دارید.