Разве не проще и отпимизированее просто перезаписывать колонку в таблице юзеров с ролями?
В этом случае у юзера может быть только одна роль. Если для вашей системы этого достаточно, то ок.
Но иногда пользователи могут иметь несколько ролей. А у каждой роли могут быть свои наборы разрешений. Тогда заводят несколько таблиц
users
roles
permissions
role_user
permission_role
permission_user (опционально)
Между ними настраивают соответствующие связи, как на уровне БД для сохранения целостности данных (FK), так и на уровне приложения (отношения many-to-many) для манипуляции этими сущностями.
Для оптимизации набор разрешений для ролей и пользователей может кэшироваться.
Для дополнительной информации гуглите про контроль доступа на основе ролей (RBAC).