Я разыгрывал свой мозг и искал надолго, не придумывая удовлетворительный способ справиться с этим. Я хочу написать хороший сервис RESTful для возврата ресурсов, но у вас есть разрешение на чтение (или запись) каждого ресурса в зависимости от вашей роли. Так, например, пользователь может видеть свой частный номер телефона в своем профиле, и поэтому может быть администратором сайта, но другой пользователь этого не сделает. Анонимный посетитель, возможно, не сможет увидеть реальное имя другого пользователя, но могут использовать другие пользователи (и администратор сайта). Существует около 4 или 5 уровней доступа и правил, по которым атрибуты могут быть прочитаны или записаны. Письмо мне доставляет удовольствие, так как клиент может PUT изменения, и сервер не обязан принимать их все (или вообще), но чтение - это моя проблема.
<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>
Обратите внимание: я не борюсь ни с одним из
- Аутентификация
- Контроль доступа на уровне ресурсов
- Внедрение контроля доступа или авторизации на стороне сервера
Я борюсь с
- Как представлять ресурсы, которые на "нормальном" HTML-сайте будут отличаться от разных людей, по-настоящему RESTful.
Это похоже на действительно общую проблему, которую каждый должен иметь, но я ничего не могу найти на ней! Пожалуйста, помогите!