I'm currently using visualforce and apex to allow a user to manage their own Hierarchical Custom Settings. By design this allows non-admins the ability to edit their Hierarchical Custom Setting values as long as the setting's Location is their User.
However, this only allows the user to manage 1 instance of settings. I need to implement a concept whereby a non admin User can manage multiple instances of settings specific to them. In this way the User can define multiple settings specific to their needs (configurations) and regardless of how many instances (records) of __Mdt they define for themselves (their userID in a User__c field on the __mdt), I will require that the Owner/User__c using my app must self-select one of the __mdt records that they Own to be "active". In this way I'm implementing user-specific settings that support scenarios whereby the user defines multiple instances (records) of settings specific to them, and they can switch between them by "activating" one at a time (isactive__c)
Since Hierarchy Custom Settings are not perfect for me here, I'm exploring Custom Metadata. I need to know whether it is possible or not to allow non-system-admins the ability to manage (Create, Read, Edit, Delete) custom metadata (__mdt) records. This article suggests the answer is NO and requires "CustomizeApplication" but are there any workarounds to letting a regular User insert/delete __mdt via APEX? Maybe Andrew Fawcett knows. Perhaps its feasible to give them access to a visualforce page whereby its controller runs in system mode and is capable of deploying and undeploying __mdt metadata records?