← Back to Architecture
ARCH-020 Architecture 20 min read For: Solution Architects

The Salesforce Permission Model

VS

Vishal Sharma

Salesforce Architecture Specialist · Updated May 2026

What you will learn in this tutorial
  • How the five layers of Salesforce access control work together and why each layer exists separately
  • The OWD + Sharing Rules architecture and the "opening up" principle that governs record-level access
  • The Profile deprecation timeline and what the Permission Sets-only future requires from your architecture
  • How to apply the Principle of Least Privilege to a Salesforce permission design
  • How to audit your permission model before it becomes a compliance or security incident

Permissions Are Architecture, Not Administration

In most Salesforce implementations, the permission model evolves organically. A user can't see a field — grant FLS. A user can't access certain records — add a sharing rule. Repeat for five years, and you have a permission model that nobody fully understands and that security auditors find indefensible. This is permission model drift, and it's the norm rather than the exception in mature Salesforce orgs.

The alternative is treating permissions as architecture from the start: defining the permission model before build, designing it from the principle of least privilege, and treating permission changes as governed changes rather than routine support tickets. The implementation is identical — you're using the same Salesforce configuration tools — but the intent and the outcome are entirely different.

💡
The Audit That Reveals the Truth

Run this SOQL query in any mature org and count the results: SELECT Id, Name FROM PermissionSet WHERE IsOwnedByProfile = false. Then check how many have been assigned to the System Administrator profile or to individual users without documented justification. In most orgs, the result reveals a permission model that has been patched rather than designed. The count tells you how much technical debt has accumulated in your security posture.

The Five Layers of Salesforce Access Control

Salesforce access control operates at five distinct layers. Understanding each layer — what it controls, how it interacts with the layers around it, and when it takes precedence — is the foundation of permission architecture.

Layer 1: Object-Level Security (OLS)

OLS controls whether a user can see, create, edit, or delete records of a given object type. Configured via Profiles and Permission Sets. This is the broadest layer — if a user doesn't have Read access to Accounts at the object level, no amount of sharing rules will make Account records visible. OLS is the architectural gating layer.

Layer 2: Field-Level Security (FLS)

FLS controls visibility and editability of individual fields on objects where the user has object access. A user might have Read access to Accounts but not be able to see the Annual Revenue field. FLS is configured per profile/permission set, per object, per field. In large orgs with hundreds of custom fields, FLS management is a significant ongoing governance burden.

Layer 3: Record-Level Security (Sharing)

Even with object access and field access, a user can only see records that have been shared with them. Record-level access is controlled by OWD, Role Hierarchy, Sharing Rules, Manual Sharing, and Apex Managed Sharing. This is the most complex layer and the one that generates the most support tickets in operational orgs.

Layer 4: UI Layer Security (Page Layouts, Lightning App Builder)

Page layouts and Lightning pages can show or hide fields and components. This is NOT a security layer — it's a presentation layer. A user who can see a field via FLS can access that field's value via API even if it's hidden from their page layout. Never rely on page layout hiding as a security control.

Layer 5: System-Level Permissions

System permissions control platform-level capabilities: "View All Data," "Modify All Data," "Manage Users," "API Enabled." These bypass record-level sharing entirely. A user with "View All Data" can see every record in the org regardless of OWD and sharing rules. System permissions are the highest-risk permissions in any org and should be audited regularly.

⚠️
Page Layouts Are Not Security

This is the most common misconception in Salesforce permission design. Hiding a field on a page layout does not protect that field's data. Any user with API access (which is default for most user types) can retrieve the field value via a REST API call, regardless of what the page layout shows. FLS is the security control; page layout is the presentation control. Design your FLS separately from your page layout design.

OWD and Sharing Architecture: The Opening-Up Principle

Org-Wide Defaults define the most restrictive baseline sharing posture for each object. The fundamental principle: sharing can only open up from OWD, never lock down. If OWD for Accounts is "Private," no user can see another user's Accounts by default. You then selectively open access via Role Hierarchy, Sharing Rules, or Apex Managed Sharing. You cannot make individual records more restrictive than OWD.

This is the architectural reason to set OWD conservatively: "Private" or "Public Read Only" for sensitive objects, never "Public Read/Write" for objects containing regulated or confidential data. Opening up is straightforward; locking down after the fact requires rethinking your entire sharing architecture.

-- SOQL audit: find users who can see records they shouldn't
-- via the ObjectPermissions and FieldPermissions objects

-- Check which Permission Sets grant Edit on a sensitive object
SELECT Parent.Label, Parent.Name
FROM   ObjectPermissions
WHERE  SObjectType = 'FinancialAccount__c'
AND    PermissionsEdit = true
ORDER BY Parent.Label

-- Check sharing: who has access to a specific record
-- Use RecordAccess (supported in API v25+)
SELECT RecordId, HasReadAccess, HasEditAccess, MaxAccessLevel
FROM   UserRecordAccess
WHERE  UserId = '005XXXX'
AND    RecordId IN :recordIds

Role Hierarchy and Its Misconceptions

The Role Hierarchy grants record access upward — a manager in the hierarchy automatically sees records owned by their direct and indirect reports. This is not a management reporting structure; it's a data access escalation path. In flat or matrix organisations, the Role Hierarchy often ends up misconfigured because administrators try to model org chart relationships instead of data access patterns. Design the Role Hierarchy around data access needs, not reporting lines.

Profiles vs Permission Sets: The Migration That's Now Mandatory

Salesforce has been pushing teams toward a Permission Set-centric model for years and has now set a concrete deprecation path for Profiles. As of 2026, Salesforce has signalled that the Profile-based access model will be deprecated in a future release — the exact timeline has shifted, but the direction is clear and unambiguous.

The Permission Set model is architecturally cleaner: instead of one large Profile per user type that contains all permissions, you compose a user's access from multiple targeted Permission Sets. A user might have "Sales Standard Access" (PS1) + "Contract Management" (PS2) + "Report Builder" (PS3). This composable model allows more granular access design and makes the "least privilege" principle easier to implement.

The Migration Challenge

Most orgs have dozens of Profiles, each containing hundreds of permissions accumulated over years. Migrating to Permission Sets requires decomposing each Profile into its constituent permission needs and rebuilding them as a Permission Set library. This is not technically complex — it's administratively intensive and requires a clear understanding of why each permission exists, which is often undocumented.

🔑
Permission Set Groups Simplify Assignment

Permission Set Groups allow you to bundle multiple Permission Sets into a single assignable group — similar to how Profiles work today, but built from composable Permission Sets. This is the migration bridge: create Permission Set Groups that replicate current Profile access, then assign the Groups while you iteratively decompose them into more granular Permission Sets. Users experience no change; you gain the architectural flexibility to evolve access control without touching individual users.

Principle of Least Privilege in Salesforce

The Principle of Least Privilege states that a user should have exactly the access needed to perform their function — no more. Implementing this in Salesforce requires three design decisions: what objects the user needs (OLS), what fields on those objects (FLS), and which records (sharing). These decisions should be made from the user's job function, not from convenience.

In practice, least privilege in Salesforce fails most often in two places. First, in API integration users: integration accounts are frequently granted "Modify All Data" or "System Administrator" profile because it's the path of least resistance when setting up an integration. This is a significant security risk — any compromise of the integration credentials grants full org access. Integration users should have the minimum permissions needed for their specific integration function.

Second, in "temporary" access grants that become permanent. A user is given elevated access "just for this project" and the access is never revoked. In a mature org, these accumulated temporary grants create a permission model that no longer reflects any intentional design. Permission set assignment reviews — automated via Flow or manual via governance — should be a regular part of your operational security posture.

Auditing Your Permission Model

A permission model audit should answer three questions: who has access to sensitive data (sensitive objects, fields, and records), who has elevated system permissions (View All, Modify All, Manage Users), and are there over-permissioned integration users or inactive users who still have licences and access.

Salesforce provides audit tooling via the Permission Analyser (Setup UI), the User Access and Permissions Assistant (UAPA), and the SOQL-queryable permission objects (ObjectPermissions, FieldPermissions, PermissionSet, PermissionSetAssignment). For organisations with Shield, Event Monitoring provides audit logs of what users actually accessed, not just what they're permitted to access — the gap between "permitted" and "actually accessed" is often revealing.

Quarterly Permission Review as Governance Standard

Schedule a quarterly review of high-risk permissions: users with "Modify All Data," "View All Data," "API Enabled" in combination with sensitive object access, and integration users' permission sets. In regulated industries, this review should produce a documented, signed-off artefact for audit purposes. Automate the report generation via SOQL + scheduled Flow email, but keep the human review step — automation can generate the data, but risk acceptance requires human judgement.

What Good Permission Architecture Looks Like

A well-designed Salesforce permission model has three characteristics. First, it is documented: for every Permission Set, there is a documented owner, a documented purpose, and a review date. "Admin created it in 2021 to fix something" is not documentation. Second, it is minimal: each user has the minimum access required. When access is granted temporarily, there is a process to revoke it. Third, it is auditable: you can answer the question "who can see our customer's financial data?" in under five minutes using SOQL queries against the permission objects.

Most Salesforce orgs fail on all three. The remediation path is not a one-time project — it's a governance programme. Start with a permission audit to understand current state, define the target permission architecture based on job function analysis, migrate in phases starting with the most sensitive objects, and establish ongoing governance to prevent drift from recurring.

Key Takeaways

  • Salesforce access control has five layers: Object (OLS), Field (FLS), Record (Sharing), UI (presentation only — not a security control), and System permissions
  • OWD defines the most restrictive baseline — sharing can only open up from OWD, never lock down. Set OWD conservatively from the start
  • Page layouts do not protect data — FLS does. A field hidden on a page layout is still accessible via API to any user with FLS read access
  • Profiles are being deprecated — the Permission Set-centric model (with Permission Set Groups as the assignment mechanism) is the future and should be the target architecture for new design
  • Integration users are the highest-risk over-permissioned accounts in most orgs — grant them the minimum permissions for their specific integration function, not System Administrator
  • The gap between "permitted to access" and "actually accessed" is revealed by Event Monitoring (Shield) — this gap is the security risk surface you cannot see from permission configuration alone
  • Quarterly permission reviews for high-risk permissions are a governance standard, not an optional best practice

Checkpoint: Test Your Understanding

1. A user has Read access to the Account object (OLS) and Read access to the Annual Revenue field (FLS). Their OWD for Accounts is "Private." Can they see an Account record owned by another user?

A. Yes — OLS and FLS access grants visibility to all records of that object type
B. No — OWD "Private" means the user can only see records they own unless a sharing rule, role hierarchy, or manual share has explicitly granted access to that specific record
C. Yes — Read FLS on a field overrides Private OWD for records containing that field
D. Only if the Account is in the user's role hierarchy reporting chain

2. Why should page layout hiding never be used as a security control for sensitive field data?

A. Page layouts only apply in the desktop UI — the mobile app ignores them entirely
B. Any user with API access (default for most user types) can retrieve a field's value via a REST API call regardless of whether it's hidden on the page layout — FLS is the actual security control
C. Page layout hiding is a valid security control but only when combined with Profile restrictions
D. Page layout changes are too easy to reverse in Setup and therefore unreliable as controls

3. What is the architectural role of Permission Set Groups in the migration from Profiles to Permission Sets?

A. Permission Set Groups replace Profiles entirely and are assigned in the same way
B. Permission Set Groups are only for system administrators — regular users must be assigned individual Permission Sets
C. Permission Set Groups bundle multiple Permission Sets into a single assignable unit — they serve as a migration bridge, allowing Profile access to be replicated initially and then iteratively decomposed into granular Permission Sets without disrupting user experience
D. Permission Set Groups allow sharing rules to be defined based on permission set membership rather than role hierarchy

Discussion & Feedback