Alright, so these are things i have to work with :

Assuming user u1, u2 and u3 (all have the same profiles),

  1. Same opp record type is assigned to all of them.
  2. If a custom field (sub_record_type__c) is = 'Subscription', then u3 should only be able change the 'Stage' and 'Close Date' of the opportunity. u1 and u2 and proceed as usual.

Now, currently, I have explored the option of dynamic page layouts, but it does not work for standard objects. So, currently, I have implemented a solution where I have a permission set assigned to u1 and u2, and check in the before update trigger to fire an error if u3 tries to change anything other than 'stage' and 'opportunity'. But this is not an elegant solution that I like as it is in the code and needs exception fields to be maintained.

Also, validation rules are a no go, as we will have to have a validation to check every field change for the user and maintain it for every field addition.

Is there another config way to solve this?

  • Hi, May I know, What is the OWD permission for the Opportunity object in your org?
    – Raj
    Oct 27, 2021 at 10:45
  • The OWD for Opp should be private. Oct 27, 2021 at 11:01
  • Let me know, If you have the opportunity "X" which has custom field (sub_record_type__c) is = 'Subscription', Then user u3 need having edit access for the fields Stage and Close Date. What about the remaining fields access for users u1 and u2? Those are all need to able to update remaining fields for the opportunity "X" except "Close date" and "Stage" ?
    – Raj
    Oct 27, 2021 at 11:59
  • @MohanRaj Thanks, yes u1 and u2 will have access to the regular fields as per the FLS provided to the profile. Oct 29, 2021 at 13:29
  • dynamic page layouts for Opportunity was added in Winter 23
    – cropredy
    Nov 14, 2022 at 23:09

1 Answer 1


Sorry, You can't done this requirement due to it's complex behavior. Since the Opportunitiesfield (Stage and Closed Won) access has been stick with Profile or Permission set. So you can't provide and restrict those fields access based on any record values in that object on Salesforce.

You can only open the object/field access for any user by profile/permission set. You can't restrict any existing Std. object/field access based on record value for that particular object.

The above is a Salesforce core concept of it's design.

Simply In Salesforce,

  • You can restrict record access for any specific user by Restriction rule or Role Hierarchy or OWD settings.
  • You can open the record record access for any specific user by Sharing rule or Role Hierarchy or OWD settings.
  • You can Open the object/field access into any specific user by Profile or Permission set.
  • You can't restrict any specific field access based on record value.

Thanks :(

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .