- Home
- /
- Salesforce Testing
- /
- Security Testing
- /
- Profile Permission Testing
Salesforce Profile Permission Testing
Salesforce profile permission testing validates the baseline access a profile grants before any permission set or group is layered on. It proves that each profile's system permissions, object and field floor, login hours, login IP ranges, default record types, page layout assignments and app defaults match the intended baseline — so the foundation every user stands on is least privilege from the start.
Every user has exactly one profile, so a single profile change can move the access of hundreds of users at once.
What a profile still governs
Every Salesforce user is assigned exactly one profile. Historically the profile held nearly all access: object CRUD, field-level security, system permissions, tab and app visibility, Apex and Visualforce access. Salesforce now recommends a permission-set-led model in which profiles are kept minimal and permission sets carry most access, and it has signaled a long-term move away from profiles as the primary place for permissions.
Even in that model, the profile remains the home of settings that permission sets do not replace. Login hours and login IP ranges are defined per profile. Page layout assignments by record type, default record types, the default app and some session and password policies are profile-level. The profile also defines the floor: anything granted there is held by every user on it, and no permission set can take it away.
That combination makes the profile both a security control and a blast radius. Profile permission testing validates the floor in isolation, then confirms profile-only settings behave as intended. How sets and groups build on that floor is covered in permission set testing.
Profile settings and how they fail
Each profile-level setting has a characteristic failure mode and a test that exposes it.
| Profile setting | How it fails | What to test |
|---|---|---|
| System permissions | View All Data, Modify All Data, Manage Users or Customize Application left on a cloned profile | A persona on the profile is denied each administrative action |
| Object permissions floor | Create, edit or delete granted on the profile to every user by default | Profile-only persona has only the intended baseline CRUD |
| Login IP ranges | No ranges set, or ranges broader than the corporate network | Login from outside the range is refused for the profile |
| Login hours | Hours not set for profiles meant to work in fixed windows | Session is refused or ended outside permitted hours |
| Default record type | New records created with the wrong record type and business process | Record creation defaults to the intended type per profile |
| Page layout assignments | Layout by record type assigned incorrectly, hiding required fields or exposing actions | Each profile sees the intended layout for each record type |
| Tab and app visibility | Apps and tabs default on for profiles that should not use them | Only intended apps appear, and hidden tabs do not replace object-level denial |
Profile risks that stay invisible
Profile problems usually date from the org's early years and persist because the profile predates everyone who now administers it.
The cloned administrator
Custom profiles cloned from System Administrator for a power user or integration keep system permissions nobody meant to hand out.
Standard profile assumptions
Standard profiles have permissions that cannot be edited, so teams assume a standard profile is safe when it grants more than the job needs.
Hidden tab mistaken for denial
Setting a tab to hidden removes navigation, but object access still works through search, related lists, reports and the API.
Profile sprawl
Dozens of near-identical profiles drift apart one tweak at a time, so users with the same job end up with different access floors.
Missing network restrictions
Profiles without login IP ranges rely entirely on other controls, and nobody notices until a login from an unexpected location succeeds.
Export and API by default
API Enabled and Export Reports on a broad profile let every user extract data in bulk, even when their role never requires it.
Baseline-first profile testing
Testing the profile on its own before layering sets makes the source of any over-provisioning unambiguous.
Inventory active profiles
List profiles with active users, their user counts and the personas each represents, and flag profiles cloned from administrator or standard profiles.
Define the intended floor
For each profile, record the baseline object, field and system permissions and the profile-only settings it should carry.
Create profile-only personas
Build a test user on each profile with no permission sets or groups assigned, so results reflect the profile alone.
Assert the floor and deny beyond it
Confirm baseline actions work and that administrative permissions, bulk export and out-of-scope objects are denied.
Test profile-only settings
Validate login IP ranges, login hours, default record types, layout assignments and default apps with the profile-only persona.
Layer typical sets and re-check
Add each profile's usual permission set groups and confirm the combined result, handing overlap findings to permission set testing.
Administrative permissions to deny on non-admin profiles
These system permissions carry the widest reach and should be explicit deny assertions for every profile that is not an administrator.
- View All Data and Modify All Data, which bypass sharing for every object.
- Manage Users and Assign Permission Sets, which let a user change their own or others' access.
- Customize Application and Modify Metadata, which allow configuration changes outside the release process.
- Author Apex, which permits code that can run in system mode.
- View Setup and Configuration, which exposes org configuration details useful for further access attempts.
- Export Reports and Weekly Data Export, which allow bulk data extraction.
- API Enabled for profiles whose users never need programmatic access.
- Password Never Expires on human user profiles.
Proving equivalence when moving off profiles
Many teams are migrating permissions from profiles into permission sets and groups, consolidating dozens of profiles into a few minimal ones. The goal is a cleaner model with identical or tighter access. The risk is that a user quietly loses a permission they rely on, or quietly keeps one through a leftover profile grant nobody removed.
Profile permission testing makes the migration verifiable. Capture each persona's effective behavior before the change with positive and deny assertions, perform the migration in a sandbox, and run the same suite against the new profile-plus-group combination. Every positive test should still pass, every deny test should still pass, and any new deny assertions reflecting tightened access should pass too. Permission set comparison helps map where permissions moved; the tests prove users still experience the intended access.
Profile permission test scenarios
Scenarios that validate profile baselines and profile-only settings.
| Scenario | What it proves |
|---|---|
| Profile-only sales persona attempts Modify All Data actions | The cloned profile carries no administrative permissions |
| Support profile user logs in from an IP outside the range | Login IP ranges are enforced for the profile |
| Contractor profile user logs in outside login hours | Login hours restrict access as configured |
| New case created by a partner-support profile user | Default record type and business process are correct |
| Hidden Opportunity tab, user opens an opportunity URL | Tab visibility is not relied on as object denial |
| Profile consolidated into a minimal profile plus group | Positive and deny results are unchanged after migration |
| Seasonal release changes a default on standard profiles | Baseline behavior still matches the intended floor |
Evidence, currency and what SyntraFlow is designed to do
These capabilities are available for demonstration and proof-of-concept validation.
Profile-only personas
SyntraFlow is designed to run tests as users holding only a profile, isolating the baseline from permission set grants.
Before-and-after migration runs
The same suite can run before and after a profile consolidation, showing behavioral equivalence rather than asserting it.
Baseline evidence for reviews
Runs can retain profile, persona, expected floor and results, giving access reviewers proof of each profile's effective baseline.
Release re-validation
Profile tests can re-run after deployments and seasonal releases within security regression testing.
Related pages
Salesforce security testing
The hub for persona-based validation of every Salesforce access layer.
Permission set testing
Tests the sets and groups that build on each profile's baseline.
Permission set comparison
Maps where permissions sit and move during profile consolidation.
Negative access testing
The deny method used for administrative permissions on non-admin profiles.
Role hierarchy testing
Covers record visibility, which profiles do not control on their own.
Configuration drift
Detects profile changes made outside the release process.
Profile Permission Testing testing FAQs
What is Salesforce profile permission testing?
It is the validation of the baseline access a profile grants on its own, before permission sets and groups are added. Tests run as profile-only personas to confirm the intended object, field and system permission floor, and to verify profile-level settings such as login IP ranges, login hours, default record types and layout assignments.
Why test profiles if most access now comes from permission sets?
The profile defines a floor that no permission set can remove, and it still controls settings permission sets do not, such as login IP ranges and layout assignments. A single over-provisioned profile affects every user on it, so its baseline has to be proven independently.
Does hiding a tab on a profile block access to the object?
No. Tab visibility only affects navigation. If the profile or a permission set grants object access, users can still reach records through search, related lists, reports, direct URLs and the API. Object permissions, not tab settings, should be the subject of deny assertions.
How do you test a migration from profiles to permission sets?
Run a positive and deny suite for each persona before the change, migrate in a sandbox, then run the identical suite against the new minimal profile and permission set groups. Matching results show users kept the access they need and lost nothing else unexpectedly.
Which profile permissions carry the most risk?
View All Data, Modify All Data, Manage Users, Customize Application, Modify Metadata, Author Apex and bulk export permissions carry the widest reach. They should be explicit deny assertions on every profile not intended for administrators.
Start least privilege at the profile
See how profile permission testing proves every user's baseline before a single permission set is added.