Skip to content

Security

Security mechanisms, permission model, and CRUD/FLS enforcement.

Permission Model

Permission Sets

PERMISSION SETS FTS_App_Access (Administrators) App: FlexibleTeamShare Tabs: All visible Apex: All classes Objects: Full CRUD + MAR Team_Sharing_Config: CRUD FTS_Data_Access (End Users) ObjectTeamMember__c: CRUD Team_Sharing_Config__c: Read Apex: Controller only No View/Modify All Records
Permission SetAudienceCapabilities
FTS_App_AccessAdministratorsFull app access, all tabs, all Apex classes, full CRUD + Modify All Records on objects, Team_Sharing_Config CRUD
FTS_Data_AccessEnd UsersObjectTeamMember__c CRUD, Team_Sharing_Config__c Read, controller Apex classes only, no View/Modify All Records

Access Control Logic

Who can manageteam members? No No No Yes Yes Yes SystemAdministrator? RecordOwner? Team Member withRole = Manageror Owner? ALLOWED DENIED

The isCurrentUserManager() method determines who can manage team members:

  1. System Administrators β€” always allowed
  2. Record Owners β€” always allowed
  3. Manager/Owner role team members β€” allowed
  4. Everyone else β€” denied

CRUD/FLS Enforcement

CRUD/FLS CHECKS Create isCreateable() Update isUpdateable() +isCurrentUserManager() Delete isDeletable() +isCurrentUserManager() Read WITH USER_MODE EXECUTION MODE Enforced in Controller Elevated Access(without sharing) Respects OWD/Sharing
OperationSecurity CheckImplementation
Create Team MemberSchema.sObjectType.ObjectTeamMember__c.isCreateable()Enforced in controller
Update Team MemberisUpdateable() + isCurrentUserManager()Elevated access (without sharing) after authorization
Delete Team MemberisDeletable() + isCurrentUserManager()Elevated access (without sharing) after authorization
Read Team MembersWITH USER_MODE / sharing modelRespects OWD/sharing

Input Validation

InputValidationLocation
recordIdNot blank, valid Salesforce ID formatController
userIdNot blank, valid User IDController
accessLevelNot blank, valid picklist valueController + Picklist
roleNot blank, valid picklist valueController + Picklist
endDateMust be future date or nullController + Validation Rule
objectApiNameDerived from Salesforce ID (not user input)Controller

Validation Rules

RuleObjectDescription
End_Date_Cannot_Be_PastObjectTeamMember__cPrevents setting end date in the past

Access Level Mapping

ObjectTeamMember__cAccess_Level__c Read Only Read/Write [Object]ShareAccessLevel Read Edit

Complete Security Overview

PERMISSION SETS FTS_App_AccessAdministrators FTS_Data_AccessEnd Users ACCESS CONTROL System Admin Record Owner Manager/Owner Role SHARING MODEL ObjectTeamMember__Share [Object]Share ACCESS LEVELS Read Only β†’ Read Read/Write β†’ Edit

Security Best Practices Implemented

ControlStatusImplementation
CRUD checks in controllersImplementedisAccessible(), isCreateable(), isUpdateable(), isDeletable()
FLS enforcementImplementedPermission Sets control field access
SOQL injection preventionImplementedBind variables for user input, whitelist for object names
Sharing modelImplementedwith sharing on controllers, without sharing only where documented
Input validationImplementedNull checks, format validation, business rules
XSS preventionImplementedLWC framework handles output encoding

External Integration Security

CheckResult
HTTP CalloutsNone β€” package makes no external calls
Named CredentialsNot used
External ObjectsNot used
Remote Site SettingsNot required
CSP ViolationsPass β€” no Content-Security-Policy violations