Alright, so these are things i have to work with :
Assuming user u1, u2 and u3 (all have the same profiles),
- Same opp record type is assigned to all of them.
- 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?