- پشتیبانی از نسخه های
- 2.3
- نیاز به ویرایش مجوزهای گروههای کاربری
- هست
- مورد نیاز اضافی
- PHP8.0+
معرفی
افزونهای کاربردی برای تیم مدیریت انجمن که به کارکنان دارای مجوز اجازه میدهد بهعنوان یک عضو دیگر وارد انجمن شوند و دقیقاً همان صفحاتی را ببینند که آن عضو میبیند؛ با همان مجوزها، وضعیت خواندهنشدهها و پیامهای خطا، بدون اینکه هیچوقت نیاز به دریافت رمز عبور آن عضو باشد.تمام دفعات ورود به حساب دیگران ثبت میشود، تمام Sessionهای فعال قابل مشاهده هستند و هر Session نیز بهصورت خودکار پایان مییابد.
امکانات
شش روش برای شروع Impersonation وجود دارد که همگی از یک مجوز یکسان استفاده میکنند و فقط زمانی نمایش داده میشوند که حساب مقصد واقعاً امکان ورود از این طریق را داشته باشد:- Staff Bar
- پروفایل عضو
- نوار عملیات پست
- فهرست کاربران در Admin CP
- ویرایش کاربر در Admin CP
- لینک مستقیم
صفحه تأیید
- بررسی هویت — آواتار، نام و ایمیل حساب مقصد نمایش داده میشود تا کاملاً مشخص باشد قرار است وارد کدام حساب شوید.
- دلیل اختیاری — میتوانید یک توضیح متنی وارد کنید که در رکورد Audit و Log ذخیره میشود.
- حسابهای محدودشده مسدود نمیشوند، بلکه علامتگذاری میشوند — حسابهای Banned، غیرفعال، در انتظار تأیید، ردشده، در انتظار تأیید ایمیل و حسابهایی که ایمیل آنها برگشت میخورد، بهوضوح مشخص میشوند اما همچنان امکان ورود به آنها وجود دارد. در واقع هدف اصلی همین است: بتوانید دقیقاً ببینید یک عضو محدودشده چه چیزی را مشاهده میکند.
- درخواست مجدد رمز عبور — قبل از ورود به حساب عضو، رمز عبور خودِ کارمند یا مدیر درخواست میشود.
هنگام ورود بهعنوان یک عضو دیگر
- Staff Bar تغییر رنگ میدهد و یک خط تأکیدی دارد تا در هیچ صفحهای ابهامی درباره حساب مورد استفاده وجود نداشته باشد.
- نشانگر دائمی و امکان بازگشت با یک کلیک — در تمام صفحات عبارتهای زیر نمایش داده میشوند:
- Signed in as {member}
- Return to {yourself}
- Logout به معنی بازگشت است. اگر هنگام Impersonation روی Logout کلیک کنید، Impersonation پایان یافته و کارمند به حساب خودش بازمیگردد؛ نه اینکه از حساب خودش نیز خارج شود. همچنین Remember Me مربوط به حساب خودش از بین نمیرود؛ اتفاقی که در Logout عادی رخ میدهد.
- انجمن در تمام موارد شما را همان عضو مقصد در نظر میگیرد؛ شامل مجوزها، استایل، قابل مشاهده بودن نودها، شمارنده مطالب خواندهنشده و پیامهای خطا.
محدودیتهای امنیتی
- Administratorها هرگز قابل Impersonate نیستند. این موضوع بهصورت Hard-coded اعمال شده و یک Permission نیست؛ زیرا اگر بتوان چنین مصونیتی را با Permission حذف کرد، دیگر مصونیت واقعی محسوب نمیشود.
- مصونیت قابل اعطا — یک Permission جداگانه با عنوان Cannot be logged in as برای محافظت از Moderatorها، VIPها یا حتی یک عضو خاص وجود دارد.
- تأیید رمز عبور — داشتن Session سرقتشده یک کارمند بهتنهایی برای دسترسی به حساب اعضا کافی نیست. تأیید رمز عبور به مدت ۳۰ دقیقه معتبر است و برای هر Switch مصرف میشود؛ بنابراین هر Impersonation باید بهصورت جداگانه تأیید شود.
- بدون Impersonation تو در تو — قبل از ورود به حساب دیگری، ابتدا باید به حساب خودتان بازگردید.
- یک Session برای هر کارمند در کل انجمن — اگر یک Session دوم شروع شود، Session اول بسته شده و Session آن دستگاه از بین میرود؛ بنابراین هیچ Tab فراموششدهای وجود نخواهد داشت که همچنان بهعنوان شخص دیگری در حال مرور انجمن باشد.
- محدودیت زمانی اجباری — مقدار پیشفرض ۳۰ دقیقه است و پس از آن کارمند بهصورت خودکار به حساب خودش بازگردانده میشود. کاهش این مقدار روی Sessionهای در حال اجرا نیز اعمال میشود؛ اما افزایش آن، Sessionای را که با محدودیت سختگیرانهتر شروع شده تمدید نمیکند.
- هیچ Credentialی برای حساب مقصد ایجاد نمیشود — برای حساب Impersonateشده هیچ Remember Me Cookieای ساخته نمیشود؛ بنابراین چیزی از Session فراتر نمیرود.
- حذف افزونه ابتدا Sessionهای فعال را پایان میدهد و سپس کدی که وظیفه پایان دادن به آنها را دارد حذف میشود.
تمام مسیرهای خطا نیز کارمند را به حساب خودش بازمیگردانند
هر یک از موارد زیر باعث پایان مستقل Session شده و نتیجه آن نیز ثبت میشود؛ بنابراین کاربر هیچگاه در هویتی باقی نمیماند که امکان خروج از آن را نداشته باشد.| اتفاق | ثبت میشود بهعنوان | نتیجه |
|---|---|---|
| کارمند به حساب خودش بازمیگردد | manual | بازگشت به حساب خودش |
| کارمند Logout میکند | logout | بازگشت به حساب خودش و همچنان وارد بودن |
| محدودیت زمانی به پایان میرسد | expired | بازگشت خودکار |
| Administrator Session را اجباری پایان میدهد | forced | Session بهطور کامل از بین میرود |
| کارمند Session دیگری را شروع میکند | superseded | Session دستگاه قبلی از بین میرود |
| هیچکس به Session بازنمیگردد | stale | پس از ۲۴ ساعت توسط Cron بسته میشود |
| مجوز در میانه Session لغو میشود | revoked | بازگشت خودکار |
| حساب عضو حذف میشود | target_gone | بازگشت خودکار |
| حساب کارمند حذف شود یا عضو رمز عبورش را تغییر دهد | invalidated | Session بهطور کامل بسته میشود و کارمند هرگز در حالت Impersonation باقی نمیماند |
Audit Log
مسیر:Admin CP → Logs → Users → Login as user
این بخش تحت مجوز استاندارد View logs در Admin قرار دارد؛ همان مجوزی که برای Moderator Log استفاده میشود.
- یک رکورد برای هر Session شامل:
- کارمند
- عضو مورد Impersonate
- دلیل
- IP
- زمان شروع
- مدت Session
- نتیجه
- فیلترها
- بر اساس کارمند، با Select
- بر اساس عضو مورد Impersonate، با Autocomplete
- بازه زمانی
- نمایش فقط Sessionهای فعال
- فیلترها در URL نیز ثبت میشوند، بنابراین میتوان یک نمای فیلترشده را مستقیماً لینک کرد.
- جزئیات رکورد در یک Overlay نمایش داده میشود و شامل تمام اطلاعات، از جمله محدودیتهای اعمالشده برای مخفی کردن ردپای Session است. این اطلاعات در زمان ایجاد Session ذخیره میشوند تا حتی اگر تنظیمات بعداً تغییر کرد، تاریخچه همچنان دقیق باقی بماند.
- حسابهای حذفشده نیز نام خود را در Log حفظ میکنند؛ نام کاربری هنگام ثبت رکورد ذخیره میشود.
- ارتباط با Admin Log داخلی XenForo — هر رویداد یک رکورد xf_admin_log نیز ایجاد میکند و این دو رکورد به یکدیگر مرتبط هستند.
- نگهداری Log — Sessionهای تکمیلشده هر روز پس از تعداد روزهای تعیینشده حذف میشوند. مقدار پیشفرض 365 روز است و مقدار 0 به معنی نگهداری دائمی است. Sessionهای باز، صرفنظر از سن آنها، هرگز حذف نمیشوند.
Sessionهای فعال
مسیر:Admin CP → Users → Active sessions
این بخش مجوز مدیریتی اختصاصی خود را دارد؛ زیرا پایان دادن به یک Session صرفاً مشاهده یک Log نیست، بلکه مستقیماً Session یک Administrator دیگر را خاتمه میدهد.
Super Adminها بهصورت خودکار این دسترسی را دارند؛ بنابراین در حالت پیشفرض مانند یک مجوز مخصوص Super Admin عمل میکند، با این تفاوت که امکان واگذاری آن به مدیران دیگر نیز وجود دارد.
در این بخش میتوانید مشاهده کنید:
- چه کسی در حال حاضر بهعنوان چه کسی وارد شده است
- دلیل ورود
- IP
- زمان شروع
- مدت زمان سپریشده
- زمان پایان
پایان اجباری Session
امکان پایان دادن اجباری به هر Session وجود دارد.در این حالت Session کارمند بهطور کامل از بین میرود و به حساب خودش بازگردانده نمیشود. این تنها حالتی است که تضمین میکند پس از تصمیم Administrator برای پایان دادن به Session، فرد دیگر همچنان در وضعیت Impersonation باقی نماند.
پاکسازی خودکار
هر ۱۵ دقیقه یک Cleanup خودکار انجام میشود و موارد زیر بسته میشوند:- Sessionهایی که به زمان انقضا رسیدهاند
- Sessionهایی که کاربر هرگز به آنها بازنگشته است؛ مانند بسته شدن لپتاپ یا Kill شدن Tab
کنترل ردپا (Footprint Control)
شش گزینه مستقل برای تعیین اینکه پس از Impersonation چه اطلاعاتی از فعالیت کارمند در حساب عضو باقی بماند.تمام گزینهها بهصورت پیشفرض فعال هستند.
Currently online list
فعالیت کارمند باعث نمیشود عضو موردنظر در فهرست کاربران آنلاین قرار گیرد.Last activity time
زمان آخرین فعالیت عضو تغییر نمیکند.Read marking
موضوعات و انجمنهای خواندهنشده پس از بازدید همچنان خواندهنشده باقی میمانند؛ حتی دکمه Mark forums read نیز وضعیت آنها را تغییر نمیدهد.Alerts
هشدارهای خواندهنشده عضو همچنان خواندهنشده باقی میمانند.Direct messages
گفتگوهای خصوصی خواندهنشده عضو همچنان خواندهنشده باقی میمانند.IP logging
IP کارمند در تاریخچه IP عضو ثبت نمیشود.البته IP کارمند همچنان در Audit Log ثبت خواهد شد؛ یعنی در محلی که باید ثبت شود.
مخفیسازی فعالیت فقط برای حسابی که در حال Impersonate شدن است اعمال میشود. بنابراین اگر در همان Request عملیاتی مربوط به یک عضو دیگر اتفاق بیفتد، رفتار سیستم برای آن عضو کاملاً عادی خواهد بود.
به این ترتیب، مخفی کردن فعالیت یک کارمند باعث خراب شدن یا تغییر اطلاعات مربوط به شخص ثالث نمیشود.
نصب
1. نصب افزونه
از مسیر زیر افزونه را نصب کنید:Add-ons → Install/upgrade from archive
2. اعطای مجوز
از مسیر:Admin CP → Groups & permissions → User group permissions
مجوز زیر را برای گروه موردنظر فعال کنید:
Log in as another member
3. محافظت از حسابهای خاص
در صورت نیاز، برای هر گروه یا عضو خاصی که نباید امکان Impersonate شدن داشته باشد، مجوز زیر را فعال کنید:Cannot be logged in as
حسابهای Administrator بهصورت پیشفرض و بدون استثنا محافظت میشوند.
4. واگذاری کنترل Session
از مسیر:Admin CP → Administrators
برای مدیرانی که باید امکان مشاهده و پایان دادن به Sessionهای فعال را داشته باشند، مجوز زیر را فعال کنید:
Login as user: end active sessions
Super Adminها از ابتدا این مجوز را دارند.
