flowchart LR
subgraph PS["PERMISSION SETS"]
subgraph ADMIN["FTS_App_Access<br/>(Administrators)"]
A1["App: FlexibleTeamShare"]
A2["Tabs: All visible"]
A3["Apex: All classes"]
A4["Objects: Full CRUD + MAR"]
A5["Team_Sharing_Config: CRUD"]
end
subgraph USER["FTS_Data_Access<br/>(End Users)"]
U1["ObjectTeamMember__c: CRUD"]
U2["Team_Sharing_Config__c: Read"]
U3["Apex: Controller only"]
U4["No View/Modify All Records"]
end
end
| Permission Set | الجمهور | القدرات |
|---|
| FTS_App_Access | المسؤولون | وصول كامل للتطبيق، جميع علامات التبويب، جميع فئات Apex، CRUD كامل + Modify All Records على الكائنات، CRUD على Team_Sharing_Config |
| FTS_Data_Access | المستخدمون النهائيون | CRUD على ObjectTeamMember__c، قراءة Team_Sharing_Config__c، فئات Apex للتحكم فقط، بدون View/Modify All Records |
flowchart TB
START["Who can manage<br/>team members?"] --> CHECK1{"System<br/>Administrator?"}
CHECK1 -->|Yes| ALLOWED["ALLOWED"]
CHECK1 -->|No| CHECK2{"Record<br/>Owner?"}
CHECK2 -->|Yes| ALLOWED
CHECK2 -->|No| CHECK3{"Team Member with<br/>Role = Manager<br/>or Owner?"}
CHECK3 -->|Yes| ALLOWED
CHECK3 -->|No| DENIED["DENIED"]
تحدد طريقة isCurrentUserManager() من يمكنه إدارة أعضاء الفريق:
- مسؤولو النظام — مسموح دائمًا
- مالكو السجلات — مسموح دائمًا
- أعضاء فريق بدور Manager/Owner — مسموح
- الجميع الآخرون — ممنوع
flowchart LR
subgraph CRUD["CRUD/FLS Checks"]
C["Create"] --> C1["isCreateable()"]
U["Update"] --> U1["isUpdateable() +<br/>isCurrentUserManager()"]
D["Delete"] --> D1["isDeletable() +<br/>isCurrentUserManager()"]
R["Read"] --> R1["WITH USER_MODE"]
end
subgraph LOC["Execution Mode"]
L1["Enforced in Controller"]
L2["Elevated Access<br/>(without sharing)"]
L3["Respects OWD/Sharing"]
end
C1 --> L1
U1 --> L2
D1 --> L2
R1 --> L3
| العملية | فحص الأمان | التنفيذ |
|---|
| إنشاء عضو فريق | Schema.sObjectType.ObjectTeamMember__c.isCreateable() | تطبيق في وحدة التحكم |
| تحديث عضو فريق | isUpdateable() + isCurrentUserManager() | وصول مرتفع (without sharing) بعد التفويض |
| حذف عضو فريق | isDeletable() + isCurrentUserManager() | وصول مرتفع (without sharing) بعد التفويض |
| قراءة أعضاء الفريق | WITH USER_MODE / sharing model | يحترم OWD/المشاركة |
| المدخل | التحقق | الموقع |
|---|
recordId | ليس فارغًا، تنسيق معرف Salesforce صالح | وحدة التحكم |
userId | ليس فارغًا، معرف مستخدم صالح | وحدة التحكم |
accessLevel | ليس فارغًا، قيمة قائمة منسدلة صالحة | وحدة التحكم + Picklist |
role | ليس فارغًا، قيمة قائمة منسدلة صالحة | وحدة التحكم + Picklist |
endDate | يجب أن يكون تاريخًا مستقبليًا أو null | وحدة التحكم + Validation Rule |
objectApiName | مشتق من معرف Salesforce (ليس مدخل مستخدم) | وحدة التحكم |
| القاعدة | الكائن | الوصف |
|---|
End_Date_Cannot_Be_Past | ObjectTeamMember__c | يمنع تعيين تاريخ انتهاء في الماضي |
flowchart LR
subgraph INPUT["ObjectTeamMember__c<br/>Access_Level__c"]
I1["Read Only"]
I2["Read/Write"]
end
subgraph OUTPUT["[Object]Share<br/>AccessLevel"]
O1["Read"]
O2["Edit"]
end
I1 --> O1
I2 --> O2
flowchart TB
subgraph PERM["Permission Sets"]
PS1["FTS_App_Access<br/>Administrators"]
PS2["FTS_Data_Access<br/>End Users"]
end
subgraph ACCESS["Access Control"]
AC1["System Admin"]
AC2["Record Owner"]
AC3["Manager/Owner Role"]
end
subgraph SHARE["Sharing Model"]
SH1["ObjectTeamMember__Share"]
SH2["[Object]Share"]
end
subgraph LEVELS["Access Levels"]
LV1["Read Only → Read"]
LV2["Read/Write → Edit"]
end
PERM --> ACCESS
ACCESS --> SHARE
SHARE --> LEVELS
| الضبط | الحالة | التنفيذ |
|---|
| فحوصات CRUD في وحدات التحكم | مطبق | isAccessible()، isCreateable()، isUpdateable()، isDeletable() |
| تطبيق FLS | مطبق | Permission Sets تتحكم في الوصول للحقول |
| منع حقن SOQL | مطبق | متغيرات ربط لمدخلات المستخدم، قائمة بيضاء لأسماء الكائنات |
| نموذج المشاركة | مطبق | with sharing على وحدات التحكم، without sharing فقط حيث موثق |
| التحقق من المدخلات | مطبق | فحوصات null، التحقق من التنسيق، قواعد العمل |
| منع XSS | مطبق | إطار عمل LWC يتعامل مع ترميز المخرجات |
| الفحص | النتيجة |
|---|
| استدعاءات HTTP | لا شيء — الحزمة لا تقوم باستدعاءات خارجية |
| Named Credentials | غير مستخدم |
| External Objects | غير مستخدم |
| Remote Site Settings | غير مطلوب |
| انتهاكات CSP | نجح — لا توجد انتهاكات Content-Security-Policy |