Why this mattered:
During the Apex Property Operations project, I needed different user roles (Admin, Operations Manager, Field Operative, Finance User) to:
- Access the same object
- But see different UI experiences
- Without creating multiple profiles (since all non-admin users shared the same Salesforce Platform license)
Profiles alone couldn’t solve this — and page layouts definitely couldn’t.
This is where Custom Permissions + Dynamic Visibility became the right tool.
Constraint 1: Same profile, different access
All non-admin users were on the Standard Platform User profile due to Developer Org licensing.
That meant:
- I couldn’t vary UI access using profiles
- Page Layout assignment wasn’t granular enough
- Permission Sets controlled access, but not UI behaviour on their own
*Lightning App Builder cannot evaluate Permission Sets directly. It can only evaluate Standard Permissions, Custom Permissions, and User/Record context.
To introduce role-based UI behaviour without fragmenting profiles, I used Custom Permissions as a visibility switch.*
Constraint 2: Constraint: Profiles couldn’t differentiate UI under a shared license
I wanted:
- Field Operatives to see a simplified Service Task record
- Managers to see additional fields and related data
- Admins to see everything
But Lightning App Builder doesn’t let you say:
“Show this page to users with Permission Set X”
It only understands:
- Standard Permissions
- Custom Permissions
- User / Device / Record conditions
So the missing link was Custom Permissions.

What a Custom Permission actually is
A Custom Permission is:
A reusable boolean flag you can turn on for users — and then reference anywhere in Salesforce logic.
It doesn’t grant access by itself.
It simply answers the question:
“Does this user have permission to do/see this thing?”
That makes it perfect for:
- Apex (later on)
- Lightning Page visibility
- Flow decisions
- Validation rules
What I built (step by step)
1. Created a Custom Permission
Setup → Custom Permissions → New
Example:
- Label: View Field Operative Service Task Page
- API Name:
View_Field_Operative_Service_Task
This became my visibility switch.
2. Added the Custom Permission to a Permission Set
I created:
Field Operative Permission Set
Then:
- Permission Set → Custom Permissions
- Enabled the new custom permission
📌 Important insight
Permission Sets carry Custom Permissions — they don’t replace them.
3. Assigned the Permission Set to users
Assigned Field Operative Permission Set to:
- Field Operative user only
Now Salesforce could answer:
“Is this user a Field Operative?”
Without relying on profile, role, or license.
Using the Custom Permission in Lightining App Builder
This is where the magic happened 💫
4. Built multiple Lightning Record Pages (same object)
For the Service Task object, I created:
- A Field Operative record page
- A Manager/Admin record page
5. Controlled page visibility with Custom Permission
In Lightning App Builder:
- Selected the Field Operative page
- Clicked Set Component Visibility
- Chose:
- Filter Type → Permissions
- Permission → Custom Permission
View_Field_Operative_Service_Task = TRUE
Result:
- Only users with that Custom Permission saw this page
- Everyone else saw the default page
🎯 No profiles
🎯 No duplicate objects
🎯 Fully license-aware
STAR framing
Situation
Different operational users required distinct Lightning experiences while sharing the same profile and license.
Task
Deliver role-specific Lightning record pages without introducing profile sprawl or violating license constraints.
Action
Created a Custom Permission, assigned it via a Permission Set, and used it in Lightning App Builder visibility rules to dynamically control which record page users could see.
Result
Delivered a license-compliant, scalable UI model that supports role-based experiences without additional profiles or duplicated objects.

