Решением будет создание разных ролей, с которыми у вас связаны разные права.Например, r_visitor и r_administrator.Вы должны добавить каждого пользователя к соответствующей роли (ролям)
Затем вы можете предоставить разрешения ролям на уровне БД, и, как вы просите, вы можете проверить в своем приложении, есть ли у пользователя илине заданная роль, используя следующий запрос, который возвращает логическое значение:
SELECT EXISTS(
SELECT b.rolname rname,
c.rolname mname
FROM pg_auth_members a,
pg_roles b,
pg_roles c
WHERE a.roleid=b.oid
AND a.member = c.oid
AND b.rolname = 'r_visitor'
AND c.rolname='johnDoe');
Если вы хотите знать о унаследованных ролях (userA принадлежит R1, который является частью R2 -> мы хотим знать, имеет ли userAПривилегии R2), посмотрите на этот ответ , в котором реализован рекурсивный взгляд