feat: owner read-only view-as from team users table
Allow org owners to inspect any member's data scope via dual JWT; server blocks mutations and team page stays reachable for return. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
# مشاهده بهجای کاربر (فقطخواندنی برای مالک)
|
||||
|
||||
تاریخ: ۲۰۲۶-۱۰-۱۷
|
||||
وضعیت: پیادهسازیشده.
|
||||
|
||||
## هدف
|
||||
|
||||
مالک محیط بتواند از جدول کاربران صفحهٔ تیم، با هویت هر عضو همان محیط وارد شود و همان دید داده/منو/نقش او را ببیند، بدون امکان ایجاد، ویرایش یا حذف.
|
||||
|
||||
## قواعد
|
||||
|
||||
- فقط نقش `owner` میتواند وارد حالت مشاهده شود.
|
||||
- هدف: هر عضو همان `organizationId` (فهرست کاربران تیم).
|
||||
- توکن دو هویت دارد: `userId` = کاربر مشاهدهشده، `impersonatorUserId` = مالک واقعی، `viewAsReadOnly: true`.
|
||||
- دید داده و نقش ظاهری مثل کاربر مشاهدهشده است.
|
||||
- هر متد تغییردهنده (POST/PATCH/PUT/DELETE بهجز استثناها) با پیام فارسی رد میشود:
|
||||
«در حالت مشاهده بهجای کاربر دیگر امکان تغییر وجود ندارد.»
|
||||
- ظاهر UI مثل حالت عادی میماند؛ فقط سرور خطا میدهد.
|
||||
- برگشت: کلیک روی ردیف خود مالک در جدول کاربران تیم.
|
||||
- در حالت مشاهده، دسترسی به صفحهٔ تیم برای مالک واقعی باز میماند.
|
||||
- خروج از سیستم مشاهده را تمام میکند؛ ورود بعدی فقط حساب مالک است.
|
||||
|
||||
## استثناهای مجاز در حالت مشاهده
|
||||
|
||||
- `POST`/`PATCH` مربوط به شروع/پایان مشاهده (impersonate / stop)
|
||||
- `POST` خروج (`logout` اگر باشد)
|
||||
- خواندنها: GET
|
||||
- در صورت نیاز: سوئیچ لنز بایگانی اطلاعات قبل (خواندنی برای دیدن همان دید کاربر)
|
||||
|
||||
## خارج از محدوده
|
||||
|
||||
- مشاهده برای غیرمالک
|
||||
- نوار بنر بازگشت (عمداً حذف شد؛ برگشت از جدول تیم)
|
||||
- مخفی کردن دکمههای ویرایش در UI
|
||||
Reference in New Issue
Block a user