Przejdź do głównej zawartości

Bezpieczeństwo

flowchart LR
    subgraph PS["PERMISSION SETS"]
        subgraph ADMIN["FTS_App_Access<br/>(Administratorzy)"]
            A1["App: FlexibleTeamShare"]
            A2["Tabs: Wszystkie widoczne"]
            A3["Apex: Wszystkie klasy"]
            A4["Objects: Pełne CRUD + MAR"]
            A5["Team_Sharing_Config: CRUD"]
        end

        subgraph USER["FTS_Data_Access<br/>(Użytkownicy końcowi)"]
            U1["ObjectTeamMember__c: CRUD"]
            U2["Team_Sharing_Config__c: Read"]
            U3["Apex: Tylko kontrolery"]
            U4["Brak View/Modify All Records"]
        end
    end
Permission SetOdbiorcyMożliwości
FTS_App_AccessAdministratorzyPełny dostęp do aplikacji, wszystkie zakładki, wszystkie klasy Apex, pełne CRUD + Modify All Records na obiektach, CRUD Team_Sharing_Config
FTS_Data_AccessUżytkownicy końcowiCRUD ObjectTeamMember__c, odczyt Team_Sharing_Config__c, tylko klasy kontrolerów Apex, brak View/Modify All Records
flowchart TB
    START["Kto może zarządzać<br/>członkami zespołu?"] --> CHECK1{"Administrator<br/>systemu?"}
    CHECK1 -->|Tak| ALLOWED["DOZWOLONE"]
    CHECK1 -->|Nie| CHECK2{"Właściciel<br/>rekordu?"}
    CHECK2 -->|Tak| ALLOWED
    CHECK2 -->|Nie| CHECK3{"Członek zespołu z<br/>rolą Manager<br/>lub Owner?"}
    CHECK3 -->|Tak| ALLOWED
    CHECK3 -->|Nie| DENIED["ZABRONIONE"]

Metoda isCurrentUserManager() określa, kto może zarządzać członkami zespołu:

  1. Administratorzy systemu — zawsze dozwolone
  2. Właściciele rekordów — zawsze dozwolone
  3. Członkowie zespołu z rolą Manager/Owner — dozwolone
  4. Wszyscy pozostali — zabronione
flowchart LR
    subgraph CRUD["Sprawdzenia CRUD/FLS"]
        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["Tryb wykonania"]
        L1["Egzekwowane w kontrolerze"]
        L2["Podwyższony dostęp<br/>(without sharing)"]
        L3["Respektuje OWD/Sharing"]
    end

    C1 --> L1
    U1 --> L2
    D1 --> L2
    R1 --> L3
OperacjaSprawdzenie bezpieczeństwaImplementacja
Utwórz członka zespołuSchema.sObjectType.ObjectTeamMember__c.isCreateable()Egzekwowane w kontrolerze
Aktualizuj członka zespołuisUpdateable() + isCurrentUserManager()Podwyższony dostęp (without sharing) po autoryzacji
Usuń członka zespołuisDeletable() + isCurrentUserManager()Podwyższony dostęp (without sharing) po autoryzacji
Odczyt członków zespołuWITH USER_MODE / model udostępnianiaRespektuje OWD/sharing
Dane wejścioweWalidacjaLokalizacja
recordIdNie puste, prawidłowy format ID SalesforceKontroler
userIdNie puste, prawidłowe ID użytkownikaKontroler
accessLevelNie puste, prawidłowa wartość z listy wyboruKontroler + Picklist
roleNie puste, prawidłowa wartość z listy wyboruKontroler + Picklist
endDateMusi być datą przyszłą lub nullKontroler + Validation Rule
objectApiNameWyprowadzane z ID Salesforce (nie dane wejściowe użytkownika)Kontroler
RegułaObiektOpis
End_Date_Cannot_Be_PastObjectTeamMember__cZapobiega ustawieniu daty końcowej w przeszłości
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/>Administratorzy"]
        PS2["FTS_Data_Access<br/>Użytkownicy końcowi"]
    end

    subgraph ACCESS["Kontrola dostępu"]
        AC1["System Admin"]
        AC2["Record Owner"]
        AC3["Rola Manager/Owner"]
    end

    subgraph SHARE["Model udostępniania"]
        SH1["ObjectTeamMember__Share"]
        SH2["[Object]Share"]
    end

    subgraph LEVELS["Poziomy dostępu"]
        LV1["Read Only → Read"]
        LV2["Read/Write → Edit"]
    end

    PERM --> ACCESS
    ACCESS --> SHARE
    SHARE --> LEVELS
KontrolaStatusImplementacja
Sprawdzenia CRUD w kontrolerachZaimplementowaneisAccessible(), isCreateable(), isUpdateable(), isDeletable()
Egzekwowanie FLSZaimplementowanePermission Sets kontrolują dostęp do pól
Zapobieganie wstrzykiwaniu SOQLZaimplementowaneBind variables dla danych wejściowych użytkownika, whitelist dla nazw obiektów
Model udostępnianiaZaimplementowanewith sharing na kontrolerach, without sharing tylko tam, gdzie udokumentowane
Walidacja danych wejściowychZaimplementowaneSprawdzenia null, walidacja formatu, reguły biznesowe
Zapobieganie XSSZaimplementowaneFramework LWC obsługuje kodowanie wyjścia
SprawdzenieWynik
Wywołania HTTPBrak — pakiet nie wykonuje wywołań zewnętrznych
Named CredentialsNie używane
External ObjectsNie używane
Remote Site SettingsNiewymagane
Naruszenia CSPZaliczone — brak naruszeń Content-Security-Policy