Skip to content

Bezpieczeństwo

Mechanizmy bezpieczeństwa, model uprawnień i egzekwowanie CRUD/FLS.

Model uprawnień

Permission Sets

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

Logika kontroli dostępu

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

Egzekwowanie CRUD/FLS

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

Walidacja danych wejściowych

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ły walidacji

RegułaObiektOpis
End_Date_Cannot_Be_PastObjectTeamMember__cZapobiega ustawieniu daty końcowej w przeszłości

Mapowanie poziomu dostępu

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

Pełny przegląd bezpieczeństwa

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

Zaimplementowane najlepsze praktyki bezpieczeństwa

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

Bezpieczeństwo integracji zewnętrznych

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