حسابرسی اشتراک‌گذاری خارجی SharePoint با Microsoft Graph

حسابرسی اشتراک‌گذاری خارجی SharePoint با Microsoft Graph

17 دقیقه مطالعه · منتشر شده ۱۴۰۵/۵/۶

دانلود workflow

فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.

  1. فایل JSON را دانلود کنید.
  2. در n8n: Workflows → Import from File.
  3. Credentialهای هر node را متصل کنید.
  4. workflow را فعال کنید.

شناسه workflow: 12495 · منبع: کاتالوگ Axeto

حسابرسی اشتراک‌گذاری خارجی SharePoint Online و پیوندهای ناشناس با Microsoft Graph

این گردش کار محیط SharePoint Online شما را برای شناسایی محتوای به اشتراک گذاشته شده خارجی حسابرسی می‌کند. پیوندهای اشتراک‌گذاری ناشناس (پیوندهای "هر کسی") و موارد به اشتراک گذاشته شده با کاربران خارجی/مهمان را شناسایی می‌کند. این فرآیند از Microsoft Graph برای اسکن سیستماتیک سایت‌ها، درایوها (کتابخانه‌های اسناد) و موارد (فایل‌ها/پوشه‌ها) استفاده می‌کند و ساختارهای دایرکتوری را به طور بازگشتی برای بازیابی مجوزهای هر مورد پیمایش می‌کند. در نهایت، فقط مواردی را که خارجی به اشتراک گذاشته شده‌اند، فیلتر و خروجی می‌دهد و یک گزارش مختصر و آماده حسابرسی ارائه می‌دهد.

شما می‌توانید این گردش کار و موارد دیگر را در کاتالوگ n8n Axeto.ai بیابید.

نمای کلی گردش کار

این گردش کار به چندین بخش منطقی تقسیم شده است:

1. پیکربندی و اجرا: دامنه‌های tenant را برای تمایز کاربران داخلی از خارجی تنظیم می‌کند و فرآیند حسابرسی را به صورت دستی آغاز می‌کند.

2. کشف سایت و درایو SharePoint: تمام سایت‌های SharePoint را فهرست می‌کند، سایت‌های خاص سیستم را فیلتر می‌کند و کتابخانه‌های اسناد (درایوها) مرتبط با هر سایت مربوطه را بازیابی می‌کند.

3. پیمایش بازگشتی مورد: برای هر درایو کشف شده، این بلوک گردش کار را به عنوان یک فرآیند فرعی فراخوانی می‌کند. این فرآیند فرعی به طور بازگشتی ساختار پوشه را پیمایش می‌کند و تمام موارد (فایل‌ها و پوشه‌ها) را جمع‌آوری می‌کند.

4. جمع‌آوری و جفت کردن مجوزها: برای هر مورد شناسایی شده در طول پیمایش، این بلوک مجوزهای مرتبط با آن را دریافت کرده و این داده‌ها را با متادیتای مورد ادغام می‌کند.

5. تجزیه و تحلیل و فیلتر کردن مجوزها: یک گره کد، ورودی‌های مجوز جمع‌آوری شده را تجزیه و تحلیل می‌کند تا موارد زیر را شناسایی کند:

* پیوندهایی با scope === "anonymous".

* اصول شناسایی شده به عنوان مهمان یا کاربران خارجی (بر اساس #ext#، urn:spo:guest، یا دامنه‌های ایمیل که در دامنه‌های tenant پیکربندی شده وجود ندارند).

سپس گردش کار فقط مواردی را که این معیارهای اشتراک‌گذاری خارجی را برآورده می‌کنند، با فیلدهای ضروری مناسب برای حسابرسی قالب‌بندی می‌کند.

تحلیل جزئیات بلوک‌ها

بلوک A: ورود به گردش کار و پیکربندی دامنه سازمان

این بلوک نقطه شروع گردش کار را تعریف کرده و پارامترهای ضروری برای شناسایی دسترسی خارجی را پیکربندی می‌کند.

  • Node: Manual Trigger

* Type: n8n-nodes-base.manualTrigger

* نقش: نقطه ورود گردش کار. اجرا با کلیک بر روی دکمه "Execute workflow" آغاز می‌شود.

* پیکربندی: هیچ پارامتر خاصی لازم نیست.

* خروجی به: گره Set Tenant Domains.

* موارد مرزی: هیچ، زیرا به صورت دستی آغاز می‌شود.

  • Node: Set Tenant Domains

* Type: n8n-nodes-base.set

* نقش: ثابت‌های زمان اجرا، به ویژه لیست دامنه‌های داخلی سازمان را تعریف می‌کند.

* پیکربندی:

* یک متغیر به نام tenantDomains ایجاد می‌کند.

* این متغیر باید آرایه‌ای حاوی نام دامنه‌های سازمان شما باشد (مثلاً ["yourDomain1.onmicrosoft.com", "yourDomain1.com"]).

* متغیرهای کلیدی: متغیر tenantDomains برای مرحله تجزیه و تحلیل مجوزها حیاتی است، جایی که برای تمایز بین آدرس‌های ایمیل داخلی و خارجی استفاده می‌شود. با استفاده از عباراتی مانند $('Set Tenant Domains').first().json.tenantDomains به آن دسترسی پیدا می‌شود.

* خروجی به: گره SharePoint - Get Sites.

* موارد مرزی: اگر tenantDomains خالی یا به اشتباه پیکربندی شده باشد، دقت تشخیص دامنه ایمیل خارجی به خطر می‌افتد. لیست خالی عملاً بررسی دامنه‌های ایمیل را غیرفعال می‌کند.

بلوک B: کشف سایت و درایو SharePoint

این بلوک بر بازیابی ساختار ضروری SharePoint (سایت‌ها و درایوها) برای شروع حسابرسی تمرکز دارد.

  • Node: SharePoint - Get Sites

* Type: n8n-nodes-base.httpRequest

* نقش: API Microsoft Graph را برای بازیابی لیستی از تمام سایت‌های SharePoint در سازمان فراخوانی می‌کند.

* پیکربندی:

URL: https://graph.microsoft.com/v1.0/sites?search=

* احراز هویت: با استفاده از اعتبارنامه OAuth2، معمولاً با نام "Microsoft Graph (n8n)"، از نوع oAuth2Api پیکربندی شده است.

* خروجی به: گره Split Out - Sites.

* موارد مرزی:

* خطاهای احراز هویت: مشکلات مربوط به توکن OAuth یا عدم وجود دامنه‌های لازم (مانند Sites.Read.All) باعث شکست می‌شود.

* صفحه‌بندی API Graph: پیکربندی پیش‌فرض صفحه‌بندی API Graph (@odata.nextLink) را مدیریت نمی‌کند. اگر سازمان شما تعداد بسیار زیادی سایت دارد، تنها صفحه اول نتایج ممکن است پردازش شود مگر اینکه صفحه‌بندی به صراحت در گره HTTP Request پیکربندی شود.

  • Node: Split Out - Sites

* Type: n8n-nodes-base.splitOut

* نقش: آرایه سایت‌های بازگردانده شده توسط API Graph (value[]) را به موارد جداگانه، یکی برای هر سایت، تبدیل می‌کند.

* پیکربندی:

* fieldToSplitOut: value

* خروجی به: گره Filter sites.

* موارد مرزی: اگر پاسخ API Graph حاوی آرایه value نباشد، این گره هیچ خروجی نخواهد داشت و اجرای بعدی را در این مسیر متوقف می‌کند.

  • Node: Filter sites

* Type: n8n-nodes-base.filter

* نقش: سایت‌های SharePoint خاصی را که برای حسابرسی اشتراک‌گذاری محتوا نامربوط هستند (مانند سایت‌های تولید شده توسط سیستم) حذف می‌کند.

* شرط: $json.webUrl شامل نمی‌شود contentstorage

* خروجی به: گره SharePoint - Get Drives.

* موارد مرزی: اگر یک شیء سایت فاقد ویژگی webUrl باشد، رفتار فیلتر بسته به تنظیمات سختگیری n8n ممکن است غیرقابل پیش‌بینی باشد.

  • Node: SharePoint - Get Drives

* Type: n8n-nodes-base.httpRequest

* نقش: کتابخانه‌های اسناد (درایوها) مرتبط با هر سایت SharePoint فیلتر شده را بازیابی می‌کند.

* پیکربندی:

* URL: https://graph.microsoft.com/v1.0/sites/{{ $json.id }}/drives?$select=id,name,webUrl (شناسه سایت را به صورت پویا درج می‌کند).

* احراز هویت: از همان اعتبارنامه OAuth2 Microsoft Graph استفاده می‌کند.

* خروجی به: گره Split Out - Drives.

* موارد مرزی:

* مجوزها: به مجوز برنامه Sites.Read.All در Microsoft Graph نیاز دارد.

* صفحه‌بندی: مشابه بازیابی سایت، صفحه‌بندی برای درایوها به طور پیش‌فرض مدیریت نمی‌شود.

  • Node: Split Out - Drives

* Type: n8n-nodes-base.splitOut

* نقش: آرایه درایوهای بازگردانده شده برای هر سایت را به موارد جداگانه، یکی برای هر درایو، تبدیل می‌کند.

* پیکربندی:

* fieldToSplitOut: value

* خروجی به: گره Call 'Audit SharePoint for externally shared Items and anonymous permissions'.

* موارد مرزی: اگر پاسخ API Graph فاقد آرایه value برای درایوها باشد، هیچ پردازش بیشتری برای آن سایت انجام نخواهد شد.

بلوک C: پردازش درایو از طریق فراخوانی خود (هماهنگ‌سازی گردش کار)

این بلوک منطق اصلی حسابرسی را با فراخوانی خود گردش کار به صورت بازگشتی برای هر درایو هماهنگ می‌کند.

  • Node: Call 'Audit SharePoint for externally shared Items and anonymous permissions'

* Type: n8n-nodes-base.executeWorkflow

* نقش: یک اجرای فرعی از گردش کار فعلی را برای هر درایو آغاز می‌کند. این امکان پیمایش بازگشتی موارد در هر درایو را فراهم می‌کند.

* پیکربندی:

* Workflow ID: ZcY7FluJUhdfeQAH (این باید شناسه گردش کار فعلی باشد).

* Mode: each (گردش کار فرعی را برای هر مورد ورودی اجرا می‌کند).

* ورودی‌های ارسال شده:

* driveId: به {{ $json.id }} از گره قبلی Split Out - Drives تنظیم شده است.

* folderId: در این سطح بالا به طور صریح تنظیم نشده است، که نشان‌دهنده شروع فرآیند از ریشه درایو است.

* خروجی به (در اجرای فعلی): SharePoint - Get Item Permissions, Rename Output for Item. این خروجی‌ها توسط مسیر اجرای گردش کار فرعی تولید می‌شوند.

* نکته طراحی مهم: این گردش کار یک استراتژی ترکیبی را به کار می‌گیرد، منطق هماهنگ‌کننده (کشف سایت/درایو) را با منطق گردش کار فرعی (پیمایش موارد) ترکیب می‌کند. اگرچه کاربردی است، این الگوی فراخوانی خود بازگشتی می‌تواند نگهداری پیچیده‌ای داشته باشد و در صورت عدم مدیریت دقیق، منجر به حلقه‌های بازگشتی ناخواسته شود.

* موارد مرزی:

* عدم فعالیت/مجوزهای گردش کار: اگر گردش کار غیرفعال باشد یا مجوزهای لازم برای اجرای خود را نداشته باشد، این گره با شکست مواجه می‌شود.

* مقیاس‌پذیری: برای سازمان‌هایی با درایوها و ساختارهای پوشه عمیق متعدد، این می‌تواند منجر به تعداد بسیار زیادی اجرای گردش کار شود، که به طور بالقوه منجر به مشکلات عملکردی یا پایان زمان می‌شود.

بلوک D: ورود به گردش کار فرعی و شمارش موارد

این بلوک به عنوان نقطه ورود برای اجرای گردش کار فرعی عمل کرده و تعیین می‌کند که آیا موارد از ریشه درایو یا از یک پوشه خاص فهرست شوند.

  • Node: Subworkflow - Get Items

* Type: n8n-nodes-base.executeWorkflowTrigger

* نقش: به عنوان ماشه فراخوانی گردش کار فرعی عمل کرده و پارامترهای ورودی مانند driveId و folderId را دریافت می‌کند.

* ورودی‌های پذیرفته شده: driveId, folderId.

* خروجی به: گره If Input is a Folder.

* موارد مرزی: اگر driveId ارائه نشود، درخواست‌های بعدی Microsoft Graph با شکست مواجه خواهند شد.

  • Node: If Input is a Folder

* Type: n8n-nodes-base.if

* نقش: اجرای گردش کار را بر اساس اینکه آیا folderId ارائه شده است، هدایت می‌کند.

* شرط: {{$json.folderId}} خالی نیست

* مسیر True: SharePoint - Get Child Items را برای فهرست کردن موارد در یک پوشه خاص اجرا می‌کند.

* مسیر False: SharePoint - Get Items (Root) را برای فهرست کردن موارد از ریشه درایو اجرا می‌کند.

* موارد مرزی: اگر folderId ارائه شود اما نامعتبر باشد، گره SharePoint - Get Child Items ممکن است خطای 404 را برگرداند.

  • Node: SharePoint - Get Items (Root)

* Type: n8n-nodes-base.httpRequest

* نقش: موارد سطح ریشه (فایل‌ها و پوشه‌ها) را در یک درایو مشخص بازیابی می‌کند.

* پیکربندی:

* URL: https://graph.microsoft.com/v1.0/drives/{{ $json.driveId }}/root/children?$select=id,name,webUrl,folder,file,parentReference,lastModifiedDateTime

* خروجی به: گره Split Out - Items.

* موارد مرزی:

* صفحه‌بندی: صفحه‌بندی را برای درایوهایی با تعداد زیادی مورد ریشه مدیریت نمی‌کند.

* شناسه درایو نامعتبر: به driveId معتبر و قابل دسترسی نیاز دارد.

  • Node: SharePoint - Get Child Items

* Type: n8n-nodes-base.httpRequest

* نقش: موارد فرزند (فایل‌ها و پوشه‌ها) را در یک پوشه مشخص بازیابی می‌کند.

* پیکربندی:

* URL: از عباراتی استفاده می‌کند که به زمینه ماشه برای دریافت driveId و folderId ارجاع می‌دهند: https://graph.microsoft.com/v1.0/drives/{{ $('Subworkflow - Get Items').item.json.driveId }}/items/{{ $('Subworkflow - Get Items').item.json.folderId }}/children?$select=id,name,webUrl,folder,file,parentReference,lastModifiedDateTime

* خروجی به: گره Split Out - Items.

* موارد مرزی:

* در دسترس بودن مورد: پوشه هدف ممکن است در طول فرآیند پیمایش حذف یا جابجا شده باشد.

* وابستگی به زمینه: به شدت به زمینه مورد صحیح از گره Subworkflow - Get Items متکی است. هرگونه اختلال در این زمینه می‌تواند منجر به شکست عبارات شود.

  • Node: Split Out - Items

* Type: n8n-nodes-base.splitOut

* نقش: آرایه موارد بازگردانده شده توسط API Graph (value[]) را به موارد جداگانه، یکی برای هر فایل یا پوشه، تبدیل می‌کند.

* پیکربندی:

* fieldToSplitOut: value

* خروجی به: گره If Item is not a folder.

* موارد مرزی: اگر پاسخ API Graph فاقد آرایه value باشد، هیچ پردازش بیشتری برای آن لیست موارد انجام نخواهد شد.

بلوک E: بازگشت و تجمیع موارد

این بلوک مدیریت کاوش بازگشتی پوشه‌ها و تجمیع تمام موارد کشف شده (فایل‌ها و پوشه‌ها) را برای تجزیه و تحلیل مجوزهای بعدی بر عهده دارد.

  • Node: If Item is not a folder

* Type: n8n-nodes-base.if

* نقش: فایل‌ها و پوشه‌ها را بر اساس وجود ویژگی folder در متادیتای مورد، متمایز می‌کند.

* شرط: $json.folder وجود ندارد

* مسیر True (پوشه نیست): مورد را به Keept Items and Folders (ورودی 0) ارسال می‌کند.

* مسیر False (پوشه است): مورد را به Recursive call Get Items (برای پیمایش بیشتر) و همچنین به Keept Items and Folders (ورودی 1) ارسال می‌کند تا اطمینان حاصل شود که خود پوشه‌ها در لیست حسابرسی گنجانده شده‌اند.

* موارد مرزی: مواردی با طرح‌بندی‌های غیر استاندارد که فاقد ویژگی‌های صریح folder یا file هستند، ممکن است به اشتباه طبقه‌بندی شوند.

  • Node: Recursive call Get Items

* Type: n8n-nodes-base.executeWorkflow

* نقش: به طور بازگشتی گردش کار دیگری را فراخوانی می‌کند (یا به طور بالقوه خود را، بسته به پیکربندی) برای فهرست کردن محتویات یک پوشه.

* پیکربندی:

* Workflow ID: 4sofE1bF0zs6pvOm (این شناسه به گردش کار جداگانه‌ای به نام "S&S — Get Items" در مثال اشاره دارد).

* ورودی‌های ارسال شده:

* driveId: از driveId والد به ارث برده شده است.

* folderId: به شناسه مورد پوشه فعلی ({{ $json.id }}) تنظیم شده است.

* خروجی به: Keept Items and Folders (ورودی 2).

ارجاع به گردش کار فرعی: توضیحات ارائه شده نشان می‌دهد که این گره یک گردش کار متفاوت* را فراخوانی می‌کند. این امر مستلزم وابستگی به تعریف گردش کار خارجی است. منطق پیمایش موارد در این گردش کارها تقسیم شده است که می‌تواند نگهداری را پیچیده کند.

* موارد مرزی:

* گردش کار/مجوزهای گمشده: اگر شناسه گردش کار ارجاع شده نادرست باشد، گردش کار غیرفعال باشد یا مجوزهای اجرا ناکافی باشد، شکست رخ می‌دهد.

* بازگشت عمیق: ساختارهای پوشه بسیار عمیق می‌تواند منجر به تعداد زیادی اجرای گردش کار شود، که به طور بالقوه محدودیت‌های اجرا را تحت تأثیر قرار داده یا باعث پایان زمان می‌شود.

  • Node: Keept Items and Folders

* Type: n8n-nodes-base.merge

* نقش: موارد را از منابع مختلف تجمیع می‌کند: فایل‌ها (ورودی 0)، پوشه‌ها (ورودی 1) و نتایج فراخوانی‌های بازگشتی (ورودی 2).

* پیکربندی:

* numberInputs: 3

* خروجی به: گره Return All Data.

* موارد مرزی: موفقیت فرآیند ادغام به ورود به موقع داده‌ها از تمام شاخه‌های ورودی بستگی دارد. در سناریوهای بازگشتی پیچیده، اطمینان از تکمیل تمام شاخه‌ها قبل از ادامه کار حیاتی است. اگر یک فراخوانی بازگشتی هیچ داده‌ای را برنگرداند، ورودی 2 ممکن است خالی باشد.

  • Node: Return All Data

* Type: n8n-nodes-base.set

* نقش: به عنوان یک گره عبور عمل کرده و اطمینان حاصل می‌کند که تمام داده‌های مورد جمع‌آوری شده به جلو ارسال می‌شوند. این گره به طور موثر خروجی مرحله جمع‌آوری مورد گردش کار فرعی را نشان می‌دهد.

* پیکربندی:

* includeOtherFields: true

* موارد مرزی: هیچ مورد خاصی برای این تابع عبور وجود ندارد.

بلوک F: بازیابی مجوز و جفت کردن داده‌ها

این بلوک بر دریافت مجوزها برای هر مورد و ادغام متادیتای مورد با مجوزهای آن تمرکز دارد.

  • Node: SharePoint - Get Item Permissions

* Type: n8n-nodes-base.httpRequest

* نقش: API Microsoft Graph را برای بازیابی تنظیمات مجوز برای یک مورد خاص (فایل یا پوشه) فراخوانی می‌کند.

* پیکربندی:

* URL: https://graph.microsoft.com/v1.0/drives/{{ $('Split Out - Drives').item.json.id }}/items/{{ $json.id }}/permissions

* این URL درخواست را با استفاده از driveId از گره Split Out - Drives (حفظ زمینه درایو) و id مورد فعلی که پردازش می‌شود، به صورت پویا می‌سازد.

* وابستگی کلیدی: به در دسترس بودن driveId در زمینه اجرا از گره Split Out - Drives متکی است. اگر مسیر اجرا از این گره عبور کند، عبارت با شکست مواجه می‌شود.

* خروجی به: گره Rename Output for Permissions.

* موارد مرزی:

* از دست دادن زمینه: اگر زمینه driveId به درستی حفظ نشود (مثلاً به دلیل مسیرهای اجرای متفاوت)، عبارت URL با شکست مواجه می‌شود.

* داده‌های مجوز: برخی از موارد ممکن است اطلاعات مجوز دقیقی را که انتظار می‌رود برنگردانند، یا انواع خاصی از مجوزها ممکن است توسط API Graph حذف شوند.

* محدودیت: حجم بالای درخواست‌ها می‌تواند منجر به محدودیت Microsoft Graph (خطاهای HTTP 429) شود.

  • Node: Rename Output for Permissions

* Type: n8n-nodes-base.set

* نقش: داده‌های مجوز بازگردانده شده توسط API Graph را سازماندهی می‌کند، معمولاً با قرار دادن آن در زیر یک کلید خاص. این داده‌ها را برای ادغام با متادیتای مورد آماده می‌کند.

* پیکربندی: (پیکربندی خاص به ساختار خروجی مورد نظر بستگی دارد، اما به طور کلی شامل تغییر نام یا بازسازی JSON ورودی است.)

* خروجی به: گره Rename Output for Item.

* موارد مرزی: اگر داده‌های ورودی مورد انتظار نباشد، ممکن است گره نتواند خروجی را به درستی تغییر نام دهد.

  • Node: Rename Output for Item

* Type: n8n-nodes-base.set

* نقش: متادیتای مورد را سازماندهی می‌کند و آن را برای ادغام با داده‌های مجوز آماده می‌کند.

* پیکربندی: (پیکربندی خاص به ساختار خروجی مورد نظر بستگی دارد.)

* خروجی به: گره Merge Item and Permissions.

* موارد مرزی: مشابه گره قبلی، اگر داده‌های ورودی مورد انتظار نباشد، ممکن است گره نتواند خروجی را به درستی تغییر نام دهد.

  • Node: Merge Item and Permissions

* Type: n8n-nodes-base.merge

* نقش: متادیتای مورد را با داده‌های مجوز مربوطه ادغام می‌کند و یک مجموعه داده جامع برای هر مورد ایجاد می‌کند.

* پیکربندی:

* numberInputs: 2 (یکی برای داده‌های مورد، یکی برای داده‌های مجوز).

* خروجی به: گره Code - Analyze Permissions.

* موارد مرزی: موفقیت ادغام به ساختار سازگار داده‌های ورودی از گره‌های قبلی بستگی دارد. اگر یکی از ورودی‌ها خالی باشد یا ساختار مورد انتظار را نداشته باشد، ادغام ممکن است ناقص باشد.

بلوک G: تجزیه و تحلیل مجوز و فیلتر کردن

این بلوک منطق اصلی را برای شناسایی اشتراک‌گذاری خارجی با تجزیه و تحلیل مجوزهای جمع‌آوری شده و فیلتر کردن موارد مطابق با معیارهای حسابرسی اجرا می‌کند.

  • Node: Code - Analyze Permissions

* Type: n8n-nodes-base.code

* نقش: مجوزهای هر مورد را تجزیه و تحلیل می‌کند تا موارد اشتراک‌گذاری خارجی را شناسایی کند.

* کد:

```javascript

// Get tenant domains from the first execution context

const tenantDomains = $('Set Tenant Domains').first().json.tenantDomains || [];

const internalDomains = new Set(tenantDomains);

// Function to check if a principal is external

const isExternalPrincipal = (principal) => {

if (!principal) return false;

// Check for SharePoint guest identifier

if (principal.startsWith('#ext#') || principal.startsWith('urn:spo:guest')) {

return true;

}

// Extract domain from email

const emailMatch = principal.match(/@([^@]+)$/);

if (emailMatch) {

const domain = emailMatch[1].toLowerCase();

// Check if the domain is NOT in the internal list

return !internalDomains.has(domain);

}

return false; // Assume internal if no domain or unrecognized format

};

// Process each item

for (const item of items) {

const permissions = item.json.permissions || [];

let isExternallyShared = false;

for (const perm of permissions) {

// Check for anonymous links

if (perm.roles.includes('anonymous') || perm.grantedToIdentities?.some(identity => identity.role === 'anonymous')) {

isExternallyShared = true;

break;

}

// Check for sharing with external principals

if (perm.grantedToIdentities && perm.grantedToIdentities.length > 0) {

for (const identity of perm.grantedToIdentities) {

if (identity.principal && isExternalPrincipal(identity.principal)) {

isExternallyShared = true;

break;

}

}

}

// Check for direct external sharing (e.g., via 'Link' or specific users)

if (perm.grantedTo && isExternalPrincipal(perm.grantedTo.email)) {

isExternallyShared = true;

break;

}

}

// Add a flag to the item if it's externally shared

item.json.isExternallyShared = isExternallyShared;

}

return items;

```

* خروجی به: گره Filter Externally Shared Items.

* موارد مرزی:

* پیکربندی نادرست tenantDomains: اگر tenantDomains به درستی پیکربندی نشده باشد، تشخیص کاربران خارجی بر اساس دامنه ایمیل نادرست خواهد بود.

* قالب‌های مجوز غیرمنتظره: اگر Microsoft Graph قالب‌های مجوز غیرمنتظره‌ای را برگرداند، کد ممکن است نتواند به درستی موارد خارجی را شناسایی کند.

* محدودیت‌های حافظه/پردازش: برای مجموعه داده‌های بسیار بزرگ، اجرای کد ممکن است با محدودیت‌های حافظه یا زمان مواجه شود.

  • Node: Filter Externally Shared Items

* Type: n8n-nodes-base.filter

* نقش: فقط مواردی را که به عنوان خارجی به اشتراک گذاشته شده‌اند (بر اساس خروجی گره کد) حفظ می‌کند.

* شرط: {{ $json.isExternallyShared }} برابر است با true

* خروجی به: گره Set Final Output Fields.

* موارد مرزی: اگر گره کد قبلی نتواند پرچم isExternallyShared را به درستی تنظیم کند، این فیلتر هیچ موردی را عبور نمی‌دهد.

بلوک H: خروجی نهایی

این بلوک داده‌های فیلتر شده را به یک فرمت نهایی و آماده حسابرسی تبدیل می‌کند.

  • Node: Set Final Output Fields

* Type: n8n-nodes-base.set

* نقش: فیلدهای خروجی را برای گزارش حسابرسی نهایی انتخاب و قالب‌بندی می‌کند.

* پیکربندی:

* siteName: {{ $json.siteName }} (فرض می‌کند که این فیلد از طریق ادغام‌ها در دسترس است)

* driveName: {{ $json.driveName }} (فرض می‌کند که این فیلد از طریق ادغام‌ها در دسترس است)

* itemName: {{ $json.name }}

* itemPath: {{ $json.parentReference?.path }} (مسیر پوشه را بازیابی می‌کند)

* itemType: {{ $json.folder ? 'Folder' : 'File' }}

* webUrl: {{ $json.webUrl }}

* lastModifiedDateTime: {{ $json.lastModifiedDateTime }}

* permissions: {{ JSON.stringify($json.permissions) }} (برای نمایش خواناتر مجوزها)

* خروجی به: (این گره معمولاً خروجی نهایی گردش کار است، که می‌تواند به یک فایل، پایگاه داده یا سرویس دیگر ارسال شود).

* موارد مرزی:

* فیلدهای ناموجود: اگر فیلدهای مورد انتظار (مانند siteName, driveName, parentReference) در داده‌های ورودی وجود نداشته باشند، خروجی‌ها خالی یا نادرست خواهند بود.

* قالب‌بندی تاریخ: قالب‌بندی lastModifiedDateTime ممکن است نیاز به تنظیمات اضافی داشته باشد تا با الزامات گزارش خاص مطابقت داشته باشد.

Nodeهای استفاده‌شده

سوالات متداول

این گردش کار چه نوع اشتراک‌گذاری خارجی را در SharePoint شناسایی می‌کند؟

این گردش کار پیوندهای اشتراک‌گذاری ناشناس (پیوندهای "هر کسی") و مواردی را که با کاربران خارجی یا مهمان به اشتراک گذاشته شده‌اند، شناسایی می‌کند.

چگونه این گردش کار محتوای به اشتراک گذاشته شده خارجی را شناسایی می‌کند؟

این گردش کار از Microsoft Graph برای اسکن سایت‌ها، درایوها و موارد استفاده می‌کند و مجوزها را برای شناسایی مواردی که به صورت خارجی به اشتراک گذاشته شده‌اند، بازیابی و تجزیه و تحلیل می‌کند.

خروجی این گردش کار چیست؟

خروجی این گردش کار یک گزارش مختصر و آماده حسابرسی است که موارد شناسایی شده با اشتراک‌گذاری خارجی را فهرست می‌کند.

workflowهای مرتبط

این workflow در کاتالوگ Axeto.ai بایگانی شده است. لایسنس اصلی متعلق به سازنده workflow است.