Я ломал себе голову и гуглил целую вечность, так и не придумав удовлетворительного способа справиться с этим. Я хочу написать красивую полностью RESTful-службу для возврата ресурсов, но данные, которые у вас есть, для чтения (или записи) самых разных ресурсов в зависимости от вашей роли. Так, например, пользователь может видеть свой личный номер телефона в своем профиле, как и администратор сайта, но не другой пользователь. Анонимный посетитель может не видеть настоящее имя другого пользователя, но другие пользователи (и администратор сайта) могут это видеть. Существует около 4 или 5 уровней доступа и правил, определяющих, какие атрибуты могут быть прочитаны или записаны. Я доволен написанием, поскольку клиент может ПОСТАВИТЬ изменения, а сервер не обязан принимать их все (или вообще), но чтение - это моя проблема.
<user>
<id>jimbob</id>
<real-name>Jim Roberts</real-name> <!-- only logged-in users should see this -->
<phone-number>+1 42424151</phone-number> <!-- only the user and admin users should see this -->
</user>
Я хочу иметь правильно кэшируемый ресурс профиля пользователя, который содержит все общедоступные данные, но как мне смоделировать все, что могут видеть только определенные пользователи? Я мог добавить до 4 ссылок на дополнительную информацию, большинство из которых возвращало бы несанкционированные ошибки для большинства пользователей, при этом каждая ссылка содержала дополнительную информацию, относящуюся к роли. Но это кажется очень неэффективным, а также привязывает клиентов к концепции ролей, когда раньше все, о чем им нужно было знать, - это пользователи.Есть ли какие-нибудь лучшие идеи?
<user>
<id>...</id>
<link rel="more" href="extra-user-profile-data-for-logged-in-users"/>
<link rel="more" href="extra-user-profile-data-for-senior-users"/>
<link rel="more" href="extra-user-profile-data-for-admin-users"/>
<link rel="more" href="extra-user-profile-data-for-superadmin-users"/>
</user>
Обратите внимание - я не борюсь ни с одним из
Я борюсь с
Это похоже на действительно распространенную проблему, которая должна быть у всех, но я ничего не могу найти по ней! Пожалуйста помоги!