I've been working a lot with promotions and discounts recently.  A big part of the process is being able to restrict/customise different discounts to different users on the site. In Episerver, personalising content for users is done via a visitor group.  

If you want more information about visitor groups, or, selection factories, then I would recommend reading What Is A Episerver Visitor Group ? and How to Create a Selection Factory From a Page Type in Episerver.

In order to be able to do anything useful with a visitor group, you will need to use the IVisitorGroupRepository API. The Visitor Group Repository has a number of useful methods for doing things, like creating, updating and deleting visitor groups.

Most of the code above should look semi-familiar to anyone who has created a visitor group before.  Create a class that inherits from ISelectionFactory, implement GetSelections , then use the VisitorGroupRepository to return a list of select items to the client. It's that simple