Как разграничить хранение данных пользователей?
Каждый имеет свой набор полей. Клиника, например, имеет адрес и дату основания.Мне кажется вы как-то не так пользователей определяете, клиника как пользователь не кажется логичным утверждением. Пользователь - сущность имеющая общие атрибуты - логин, пароль, опционально дату регистрации и еще несколько признаков присущим людям/иным разумным. В частности, логинится не здание фирмы и не юридичкское лицо в виде учредительных документов, а конкретный Федор Пупкин из клиники "Веселая челюсть". И связь Федора с клиникой через один ко многим (либо многие ко многим, в зависимости от сложности возможных пересечений) видится более адекватной структурой, как минимум по тому что не только Федор может управлять действиями от лица клиники, а еще например бухгалтер Василиса Андреевна. Проблема в том что у вас юзерами стали объекты, по дефолту к ним не относящиеся. Как только вы отделите мух от котлет, все встанет на свои места, в том числе через роли, так как к клиникам будут иметь доступ только роли работников клиники.
доктор, поддержка, клиника - это роли. а данные можно хранить в доп. таблицах. например, doctor_profiles, support_profiles. в них есть user_id - связь с users. тогда доступ можно так $user->doctorProfile, $user->supportProfile. Можно создать https://laravel.com/docs/9.x/eloquent-relationship... или просто отдельно связь $user->profile где внутри if/else hasOne в зависимоти от role.