コンテンツにスキップ

セキュリティ

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、Team_Sharing_ConfigのCRUD
FTS_Data_AccessエンドユーザーObjectTeamMember__cのCRUD、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()メソッドは、誰がチームメンバーを管理できるかを決定します:

  1. System Administrators — 常に許可
  2. Record Owners — 常に許可
  3. Manager/Ownerロールのチームメンバー — 許可
  4. その他全員 — 拒否
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 / 共有モデルOWD/共有を尊重
入力検証場所
recordId空白でない、有効なSalesforce ID形式Controller
userId空白でない、有効なUser IDController
accessLevel空白でない、有効なピックリスト値Controller + Picklist
role空白でない、有効なピックリスト値Controller + Picklist
endDate将来の日付またはnullである必要があるController + Validation Rule
objectApiNameSalesforce IDから導出(ユーザー入力ではない)Controller
ルールオブジェクト説明
End_Date_Cannot_Be_PastObjectTeamMember__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

実装されたセキュリティベストプラクティス

Section titled “実装されたセキュリティベストプラクティス”
制御ステータス実装
コントローラーでの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違反なし