Skip to content

Permissions: Quick Reference

Fast-track reference for profiles, permission sets, FLS, and the modern permission model. The board tests specifically whether you understand that page layouts are NOT security. Know the difference cold.

The recommended architecture for enterprise Salesforce deployments:

Minimum Access Profile feeds Permission Set Groups representing business roles, which bundle atomic Permission Sets with optional Muting Permission Sets for exceptions.
Figure 1. The modern permission model keeps the profile nearly empty and delegates all meaningful access to Permission Set Groups. Atomic Permission Sets can be reused across roles, and Muting Permission Sets handle exceptions within a PSG without touching the profile or other assignments.

Pattern: Minimum Access Profile —> Permission Set Groups (represent business roles) —> Atomic Permission Sets (one function each) —> Muting Permission Sets (exceptions)

What Stays on ProfilesWhat Moves to Permission Sets
Page layout assignmentsObject permissions (CRUD)
Record type defaultsField-level security
Login hours/IP rangesSystem permissions
Default app assignmentApex class / VF page access
User license associationTab visibility

Salesforce evaluates permissions cumulatively from all sources:

SourceHow It Combines
ProfileBaseline permissions (keep minimal)
Permission Sets (individually assigned)Additive on top of profile
Permission Set GroupsAdditive; bundles multiple PS
Muting Permission SetsSubtractive WITHIN the PSG only
PermissionWhat It DoesBypasses Sharing?
CreateInsert new recordsNo
ReadView records (subject to sharing)No
EditUpdate existing recordsNo
DeleteDelete recordsNo
View AllSee ALL records regardless of sharingYES
Modify AllEdit/Delete/Transfer ALL recordsYES
AspectField-Level SecurityPage Layout
Enforced atAPI + UI (everywhere)UI only
Can user see via API?Only if FLS grants accessYes (if FLS allows)
Can user see in reports?Only if FLS grants accessYes (if FLS allows)
True security?YESNO
Configured viaProfile or Permission SetProfile + Record Type
SettingUser Sees FieldUser Edits Field
Visible + EditableYesYes
Visible + Read OnlyYesNo
HiddenNoNo

Best practice: Default fields to hidden, then grant visibility through Permission Sets per user type.

RuleExample
One concern per PS”Sales: Create Quotes” not “Sales User Everything”
Name descriptivelyInclude functional area + permission granted
Never duplicate profilePS are additive; do not repeat what profile grants
Use PSG for role bundlesPSG = “Sales Manager”; PS = individual capabilities
Document the purposeEvery PS needs a clear description
MethodUse CaseAutomation
ManualAd hoc, small scaleAdmin assigns in Setup
Permission Set GroupRole-based bulk assignmentAssign PSG to users
Flow-basedDynamic, event-drivenFlow assigns/removes on criteria
Apex-basedIntegration-driven provisioningCode assigns during user creation
Assignment ExpirationTemporary accessAuto-expires on specified date
CategoryGranularityExample
Function-basedFine (one action)“Create Quotes”
Feature-basedMedium (platform feature)“Einstein Analytics User”
Integration-basedFine (specific integration)“API: Order Sync Service”
TemporaryTime-limited”Q4 Campaign Access” (use expiration)
ControlSecurity?What It Does
Tab visibilityNOControls whether tab appears in navigation
Object permissionsYESControls CRUD on the object
FLSYESControls field access
Page layoutNOControls UI display only

Hiding a tab does NOT prevent access to records. Users can still reach them via search, related lists, reports, and direct URLs.

Anti-PatternWhy It FailsCorrect Approach
Cloning profiles for each roleProfile sprawl; impossible to auditMinimum Access + PSGs
Managing FLS on profilesAffects all users on that profileManage FLS via Permission Sets
Page layouts to “hide” fieldsAPI/reports bypass page layoutsUse FLS
System Admin profile for integrationsFull admin access, no audit trailIntegration user + minimum PS
”Modify All Data” as shortcutBypasses all securityGrant specific object permissions
Standard profiles in productionBuilt-in permissions cannot be removedAlways use custom profiles

Situation: Insurance company migrating from 25 cloned profiles to a modern permission model. 3,000 users across 8 business functions. Current state: FLS managed on profiles, permission drift everywhere, no audit trail.

What you’d present:

  • Create one custom Minimum Access Profile (no object permissions, all fields hidden)
  • Design 8 Permission Set Groups (one per business function: Underwriter, Claims Adjuster, Agent, etc.)
  • Decompose into ~20 atomic Permission Sets (Read Policies, Write Claims, Run Actuarial Reports, etc.)
  • Muting PS for exceptions: Claims Managers get Write Claims but not Delete Claims
  • Use User Access Policies to automate migration (match users by old profile, assign new PSG)
  • Phased rollout: one business function at a time, validate with test users at each step

Why not keep profiles: 25 profiles with overlapping permissions are unauditable. Any change must be replicated across all profile clones. The PSG model lets you change one Permission Set and it flows to all groups that include it.

Situation: Pharmaceutical company. Sales reps see Account and Contact data. Compliance team needs a “Compliance Risk Score” field on Accounts that reps must NEVER see - not in UI, not in reports, not via API. SOX audit requirement.

What you’d present:

  • Compliance Risk Score field: FLS = Hidden on Sales Rep Permission Set
  • FLS = Visible + Read Only on Compliance Analyst Permission Set
  • FLS = Visible + Editable on Compliance Manager Permission Set
  • Do NOT rely on page layout removal (API access would expose the field)
  • Verify: create test user with Sales Rep PS, confirm field is invisible in reports, list views, and API queries
  • Apex code referencing this field must use USER_MODE or stripInaccessible() to respect FLS

Why FLS and not page layout: SOX audit requires provable field-level security enforcement. Page layout removal is cosmetic - the field remains accessible via API, reports, and list views. Only FLS provides auditable, enforceable access control.

Situation: During month-end close, Finance analysts need Delete access on Journal Entry records for 3 days. Normally they only have Read/Edit. No permanent elevation allowed.

What you’d present:

  • Create Permission Set: “Finance: Delete Journal Entries” (Delete permission on Journal Entry object)
  • Use Permission Set Assignment Expiration: set to expire 3 days after assignment
  • Assignment triggered by manager approval via Flow (approval process —> PS assignment with expiration)
  • Audit trail: PS assignment history shows who had elevated access and when
  • Alternative considered: Session-Based Permission Sets (rejected - requires re-authentication step that disrupts workflow)

Why Assignment Expiration: Auto-revokes after the specified date. No manual cleanup needed. Full audit trail of when access was granted and removed. The board values self-governing designs.

Personal study notes for the Salesforce CTA exam. Content compiled from VJ's study notes, official Salesforce documentation, community sources, and online publicly available content, then organized and presented with AI assistance. Not affiliated with Salesforce. © 2025–2026 VJ Srivastava.