1. Realtime Workflow (Synchronous)
-
Realtime Workflow همیشه در Context همان کاربری اجرا میشود که عملیات را انجام داده است.
-
یعنی اگر کاربر “Ali” رکوردی ایجاد کند و Realtime Workflow روی آن Trigger شود:
-
Workflow با سطح دسترسی Ali اجرا خواهد شد.
-
هر اکشنی که Workflow انجام دهد (Create, Update, Assign, Send Email و …) باید توسط Ali مجاز باشد.
-
اگر Ali مجوز کافی نداشته باشد، Workflow خطا میدهد و عملیات اصلی (مثلاً Save) هم Rollback میشود.
-
2. Background Workflow (Asynchronous)
-
در این حالت، Workflow توسط Asynchronous Service اجرا میشود.
-
اما همچنان دو Context مطرح است:
-
مالک (Owner) Workflow
-
کاربر Trigger کننده (Created By / Modified By)
-
🔑 قانون اصلی:
-
Background Workflow در Context کاربری اجرا میشود که مالک آن Workflow است (Owner).
-
به همین دلیل است که اگر Owner Workflow ادمین باشد، Workflow در عمل با دسترسیهای ادمین اجرا میشود.
📌 مثال:
-
فرض کن Workflowی طراحی کردی که روی ایجاد Lead یک ایمیل ارسال کند.
-
کاربر “Sara” یک Lead ایجاد میکند → Workflow شروع میشود.
-
اگر Owner این Workflow “System Administrator” باشد:
-
ایمیل با دسترسی Admin ارسال میشود.
-
حتی اگر “Sara” مجوز ارسال ایمیل نداشته باشد، Workflow موفق خواهد بود.
-
🔹 تفاوت مهم
-
Realtime: محدود به دسترسیهای کاربر اجراکننده (Trigger کننده).
-
Background: وابسته به دسترسیهای مالک Workflow (Owner).
🔹 نکته امنیتی مهم
-
چون Background Workflow میتواند با دسترسیهای بالاتر از کاربر اجرا شود، باید دقت زیادی در تعیین Owner آن داشت.
-
اگر همه Workflowها را با Owner “System Administrator” ذخیره کنید، در عمل هر کاربر عادی میتواند اکشنهایی انجام دهد که خودش مجوزش را ندارد (مثل تغییر Owner رکوردهای حساس).
-
بهترین Practice این است که:
-
Workflowهایی که قرار است با دسترسی بالا کار کنند، عمداً مالکشان Admin باشد.
-
Workflowهایی که باید محدود به دسترسیهای کاربران باشند، بهتر است Realtime باشند یا با مالک غیرادمین تنظیم شوند.
-
✅ جمعبندی:
-
Realtime Workflow → همیشه با دسترسی کاربر اجراکننده اجرا میشود.
-
Background Workflow → همیشه با دسترسی مالک Workflow اجرا میشود (اگر Admin باشد، در عمل Workflow با دسترسی Admin اجرا میشود).