Aller au contenu

Sécurité

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 SetAudienceCapacités
FTS_App_AccessAdministrateursAccès complet à l’application, tous les onglets, toutes les classes Apex, CRUD complet + Modify All Records sur les objets, Team_Sharing_Config CRUD
FTS_Data_AccessUtilisateurs finauxObjectTeamMember__c CRUD, Team_Sharing_Config__c Read, classes Apex contrôleur uniquement, aucun 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"]

La méthode isCurrentUserManager() détermine qui peut gérer les membres d’équipe :

  1. System Administrators — toujours autorisés
  2. Record Owners — toujours autorisés
  3. Membres d’équipe avec rôle Manager/Owner — autorisés
  4. Tous les autres — refusés
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
OpérationVérification de sécuritéImplémentation
Create Team MemberSchema.sObjectType.ObjectTeamMember__c.isCreateable()Appliqué dans le contrôleur
Update Team MemberisUpdateable() + isCurrentUserManager()Accès élevé (without sharing) après autorisation
Delete Team MemberisDeletable() + isCurrentUserManager()Accès élevé (without sharing) après autorisation
Read Team MembersWITH USER_MODE / sharing modelRespecte OWD/partage
EntréeValidationEmplacement
recordIdNon vide, format d’ID Salesforce valideController
userIdNon vide, User ID valideController
accessLevelNon vide, valeur de liste de sélection valideController + Picklist
roleNon vide, valeur de liste de sélection valideController + Picklist
endDateDoit être une date future ou nullController + Validation Rule
objectApiNameDérivé de l’ID Salesforce (pas d’entrée utilisateur)Controller
RègleObjetDescription
End_Date_Cannot_Be_PastObjectTeamMember__cEmpêche la définition d’une date de fin dans le passé
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
ContrôleStatutImplémentation
Vérifications CRUD dans les contrôleursImplémentéisAccessible(), isCreateable(), isUpdateable(), isDeletable()
Application FLSImplémentéLes ensembles de permissions contrôlent l’accès aux champs
Prévention de l’injection SOQLImplémentéVariables liées pour l’entrée utilisateur, liste blanche pour les noms d’objets
Modèle de partageImplémentéwith sharing sur les contrôleurs, without sharing uniquement là où documenté
Validation des entréesImplémentéVérifications null, validation de format, règles métier
Prévention XSSImplémentéLe framework LWC gère l’encodage de sortie
VérificationRésultat
HTTP CalloutsAucun — le package ne fait aucun appel externe
Named CredentialsNon utilisé
External ObjectsNon utilisé
Remote Site SettingsNon requis
Violations CSPRéussite — aucune violation Content-Security-Policy