استاندارد تدوین نقشها و دسترسیها در تریپیلون
۱. هدف
این راهنما روش استاندارد طراحی دسترسی در ماژولهای تریپیلون را تعریف میکند تا مشخص باشد چه Actorی، با کدام Role، در چه Scope و تحت چه شرطی میتواند یک Action را روی یک Resource انجام دهد.
۲. جایگاه در طراحی ماژول
دسترسیها پس از نهاییشدن سناریو، User Flow و Workflow طراحی میشوند؛ زیرا Permission باید از Action واقعی و وضعیت معتبر فرایند استخراج شود.
ترتیب:
- هدف، محدوده و سناریوها
- User Flow
- Workflow و وضعیتها
- نقشها و دسترسیها
- اعلانها
- خطاها و موارد خاص
- IA و Wireframe
۳. اصول پایه
- Deny by default: نبود قاعده صریح به معنی رد دسترسی است.
- Least privilege: هر Role فقط حداقل Permission لازم را دریافت میکند.
- Permission through Role: در نسخه اولیه Permission مستقیم به شخص داده نمیشود.
- Scope required: Permission بدون Scope معتبر قابل اجرا نیست.
- Authorization on every action: مشاهده UI یا دریافت لینک، مجوز انجام Action نیست.
- Separation of duties: Actionهای حساس میتوانند به Actor، تأیید یا Policy جدا نیاز داشته باشند.
- Auditability: اعطا، تغییر و استفاده از دسترسی حساس باید قابل پیگیری باشد.
- Fail secure: خطا در ارزیابی دسترسی باید به رد امن منجر شود.
۴. مفاهیم اصلی
| مفهوم | تعریف |
|---|---|
| Account | هویت دیجیتال سراسری کاربر |
| Membership | حضور عملیاتی شخص در ساختمان |
| Role | مسئولیت قابل انتساب در یک Scope |
| Role Assignment | اتصال Role فعال به Membership و Scope |
| Role Template | بسته Permissionهای یک Role در یک ساختمان |
| Permission | اجازه انجام Action مشخص روی Resource |
| Scope | محدوده اثر Permission |
| Policy | شرط تکمیلی مانند سقف مالی یا نیاز به تأیید |
| Support Access Grant | دسترسی موقت و Ticket-based پشتیبانی |
Authentication با Authorization یکسان نیست. ورود موفق فقط هویت را تأیید میکند و بهتنهایی Permission ایجاد نمیکند.
۵. فرمول دسترسی مؤثر
دسترسی فقط زمانی مجاز است که همه شروط زیر برقرار باشند:
Account Link معتبر
AND Membership فعال
AND Role Assignment فعال
AND Role Template شامل Permission
AND Scope با Resource منطبق
AND Guardهای Workflow برقرار
AND Policy تکمیلی اجازه دهد
AND هیچ Deny یا Suspension مؤثری وجود نداشته باشد
برای اقدام شخص روی دعوت خودش، رابطه او با Invitation و OTP معتبر جای Role مدیریتی را میگیرد.
۶. مدل نامگذاری
Role Code
UPPER_SNAKE_CASE
نمونه:
BUILDING_ADMINBUILDING_MANAGERBOARD_CHAIRACCOUNTANT
Permission Code
resource.action
نمونه:
unit.viewunit.manageinvitation.sendrole_template.manage
Permission باید یک Action قابل بررسی باشد. نامهایی مانند full_access یا manage_everything مجاز نیستند.
Scope
BUILDINGUNITFACILITYSHIFTASSIGNMENTTICKETPLATFORM
۷. ساختار استاندارد سند هر ماژول
- هدف و مرزبندی
- تصمیمهای نقش
- Actorها و Roleها
- Permission Catalog
- Scope و Guardها
- Default Role Matrix
- Permissionهای حساس
- قواعد Role Template
- دسترسی پشتیبانی موقت
- Self-service Capabilityها
- Transitionهای دسترسی
- Audit
- سناریوهای سوءاستفاده
- تصمیمهای باز
- معیارهای پذیرش
۸. Permission Catalog
برای هر Permission این اطلاعات ثبت شود:
| فیلد | توضیح |
|---|---|
| کد | شناسه پایدار |
| عنوان | نام فارسی |
| Resource | منبع هدف |
| Action | عمل مجاز |
| Scope | محدودههای معتبر |
| حساسیت | عادی، مهم، حساس یا بحرانی |
| Roleهای پیشفرض | Roleهای دارای Permission |
| Guard | شرط Workflow یا Policy |
| Audit | سطح ثبت |
| خارج از محدوده | Actionهای مشابه ولی غیرمجاز |
۹. Role Template
- Permissionها به Role Template متصل میشوند، نه مستقیم به شخص.
- هر ساختمان نسخه مستقل Role Templateهای فعال خود را دارد.
- بسته پیشفرض مسیر اصلی است.
- فهرست کامل Permissionها در مسیر پیشرفته نمایش داده میشود.
- تغییر Template بر همه Role Assignmentهای فعال و آینده همان Role اثر دارد.
- Per-person Override در نسخه اولیه استفاده نمیشود.
- بازگشت به بسته پیشفرض باید ممکن و Audit شود.
۱۰. Permission حساس
این حوزهها بهصورت پیشفرض حساساند:
- مدیریت Role و Permission
- مشاهده یا تغییر اطلاعات خصوصی
- انتقال مالکیت
- تنظیم مقصد تسویه
- تأیید یا انتشار مالی
- مشاهده Audit حساس
- دسترسی پشتیبانی
- تغییر Building Admin
فعالسازی یا استفاده از Permission حساس میتواند نیازمند تأیید صریح، دلیل، مدرک یا Policy تکمیلی باشد.
۱۱. Role Assignment
- Role Assignment فقط برای Membership معتبر ایجاد میشود.
- Role حساس پیش از پذیرش
PENDING_ACCEPTANCEاست و Permission ندارد. - یک شخص میتواند چند Role و Scope داشته باشد.
- پایان یک Role یا Scope نباید Roleهای نامرتبط را غیرفعال کند.
- Role بدون متصدی فقط Role Template فعال دارد و Role Assignment فعال ندارد.
۱۲. دسترسی پشتیبانی موقت
پشتیبانی نباید برای انجام کار مشتری، Role دائمی داخل ساختمان دریافت کند.
Support Access Grant باید:
- به Ticket یا درخواست ثبتشده متصل باشد؛
- Scope ساختمان و Permissionهای مجاز را محدود کند؛
- زمان شروع و پایان داشته باشد؛
- Actor واقعی پشتیبانی را حفظ کند؛
- تمام Actionها را با عبارت «به درخواست مشتری» Audit کند؛
- پس از پایان یا Revoke غیرقابل استفاده شود.
مسیر break-glass فقط برای Incident فوری، با دلیل، Audit تقویتشده و بازبینی پس از اقدام مجاز است.
۱۳. Self-service Capability
برخی Actionها بر اساس رابطه شخص با Resource مجاز میشوند و Permission مدیریتی نیستند:
- مشاهده و تصمیم درباره Role پیشنهادی خود
- مشاهده وضعیت دعوت خود
- گزارش تعلق اشتباه ساختمان یا واحد
- پرداخت بدهی واحد مرتبط، طبق قواعد ماژول مالی
این Actionها همچنان به هویت تأییدشده و Guardهای Resource نیاز دارند.
۱۴. ماتریس نقشها
مقادیر پیشنهادی:
| علامت | معنا |
|---|---|
D |
دسترسی پیشفرض |
C |
قابل اعطا با تنظیم ساختمان |
V |
فقط مشاهده |
P |
وابسته به Policy |
T |
موقت و Ticket-based |
— |
بدون دسترسی |
ماتریس خلاصه جای Permission Catalog را نمیگیرد.
۱۵. تغییر دسترسی
برای تغییر Role Template مشخص شود:
- چه کسی مجاز است؟
- چند شخص فعال متأثر میشوند؟
- Permission حساس اضافه یا حذف میشود؟
- تأیید صریح لازم است؟
- اثر فوری است یا زماندار؟
- Rollback چگونه انجام میشود؟
- چه اطلاعاتی Audit میشوند؟
۱۶. ارزیابی درخواست دسترسی
۱۷. سناریوهای سوءاستفاده
حداقل این موارد بررسی شوند:
- تغییر Building ID یا Unit ID در درخواست
- استفاده از Role یک ساختمان در ساختمان دیگر
- اجرای Action پس از پایان Scope
- فعالسازی Role پیش از پذیرش
- استفاده دوباره از Support Grant منقضی
- اعطای Permission مستقیم به شخص
- دسترسی به Person یا Unit نامرتبط
- کاهش Permission بدون اصلاح Session یا Cache
- درخواست تکراری برای Action حساس
۱۸. کنترل کیفیت
- Deny by default رعایت شده است.
- Permissionها از Actionهای واقعی استخراج شدهاند.
- Role و Permission با هم اشتباه نشدهاند.
- Permission مستقیم به شخص داده نمیشود.
- Scope برای هر Permission مشخص است.
- Guardهای Workflow ثبت شدهاند.
- Roleهای پیشفرض کمترین دسترسی لازم را دارند.
- Permissionهای حساس مشخص و دارای تأیید یا Audit هستند.
- Self-service Actionها از Permission مدیریتی جدا شدهاند.
- دسترسی پشتیبانی موقت، محدود و Ticket-based است.
- پایان Role یا Scope دسترسی نامرتبط را حذف نمیکند.
- Role Pending هیچ Permission فعالی ندارد.
- تمام Actionها در سمت سامانه دوباره Authorization میشوند.
- Matrix با Permission Catalog و Role Templateها سازگار است.
- تصمیمهای باز و استثناها ثبت شدهاند.
۱۹. روش اجرای استاندارد
- Actionهای User Flow و Transitionهای Workflow استخراج شوند.
- Resource و Scope هر Action مشخص شود.
- Permission Catalog ساخته شود.
- Permissionهای حساس علامتگذاری شوند.
- Roleهای ماژول و بسته پیشفرض آنها تعریف شوند.
- Default Role Matrix ساخته شود.
- Guard، Policy، Audit و Self-service Actionها تکمیل شوند.
- دسترسی پشتیبانی و Break-glass جدا مدل شوند.
- سناریوهای سوءاستفاده بررسی شوند.
- تناقض با Domain Model و Workflow برطرف شود.
- پس از تأیید، UI فقط Actionهای مجاز را نمایش دهد؛ Backend همچنان هر درخواست را مستقل بررسی کند.