Setting abstraction layer
Proposal
This is a feature/improvement/idea to create a better abstraction layer (settings controller/module?) on Gitlab settings to control the following:
Scopes of setting (instance, top-level-group, sub-groups, projects, user) - Instantiation sets the scope
precedence (order of scopes)
Inheritance
merging/overriding (lists/dicts) (optionally allow user to decide)
enforcing values for lower precedence scopes - (optionally allow user to decide)
caching resolved setting for each level
validations for the setting
ee/feature flag?
permissions
etc
All logic can be applied to the setting level or the scope level
This would simplify and consolidate a lot of code/complexity and hopefully make it easier to implement existing settings at multiple new levels they don't already exist with minimal overheads (Adding class/model for the setting to existing controllers/models)
Not sure if there is already an solution for this or what labels to add or if my understanding of reading the code for controllers/models was missing something