Custom field, custom data type and privileges question

Hi,
I need to create a custom select field (company/contact) with option ‘create new/delete’, similar to how categories works (ie. now there are available values “A”, “B” and soon there will be “C”, “D” …). Being more specific it shows source where contact/company comes from (private/website A mailing/website B survey, etc.). My question is how to do that (some hints), is this secure, how to give privileges to users so some won’t be able to see/sort by this info in the output? Mautic has categories that work in some part what I need, what part of code is responsible for adding new category to database? I’m new to Mautic’s everything in case of coding, so any hint will be very appreciated.
Thank You