You put a proxy model between a base model and a view. That proxy model can take care of mapping roles based on the base model data and its own role specification.