Мой вопрос касается отображения только тех частей шаблона, на которые авторизован пользователь.
Предположим, что есть проект только с пользователями и ролями пользователей и сгенерированными шаблонами и контроллерами phx.gen.html. Настраивая маршруты "/ users", мы получаем красивую таблицу со всеми пользовательскими данными и кнопками для "show", "edit" и "delete".
Роли пользователя могут быть просто обычным пользователем и администратором. Теперь я хочу, чтобы администратор мог удалять и редактировать всех пользователей, но «пользователь» должен иметь возможность редактировать только самого себя, и в чем заключается мой вопрос, он должен видеть только эти кнопки для своей записи.
Я уже настроил некоторые плагины для соответствующих действий, поэтому обычный «пользователь» не может редактировать, удалять или даже показывать другим пользователям, но он даже не должен знать о возможности сделать это. Итак, я хочу спрятать эти кнопки. Вот решения, с которыми я сталкивался или сталкивался, но все они, похоже, не совсем применимы.
- Использование маршрута "/ admin" и ограничение доступа к нему. Похоже, что этот способ используется в основном, но я не хочу этого делать, так как в моем случае администратор является только привилегированным обычным пользователем, и для администраторов практически нет необходимости в полном маршруте. Мне бы пришлось создавать новые контроллеры, новые шаблоны и т. Д.
- Итак, моей следующей мыслью было: «Просто создайте другой шаблон и удалите эти кнопки из шаблона пользователя». Ну, это работает, но это в основном так же, как 1). Мне пришлось бы дублировать контент для всех index.html и некоторых других шаблонов. Кроме того, если я хочу добавить другую роль, может быть, «менеджер» или что-то еще, я должен дублировать ее снова. Похоже, что со временем это невозможно отремонтировать.
- Добавление некоторой логики в сам шаблон, например <% = if is_admin? делать%> html-вещи <% end%>. Я знаю, что в данный момент это не повредит, так как я дважды проверяю разрешения с помощью своих разъемов в контроллере, но в любом случае ... это также кажется "грязным", так как я не хочу эту логику в шаблоне.
Кто-нибудь получил другую идею или, может быть, ссылку на кого-то, кто обсуждал это? Мне удалось найти только статьи о 1) и о том, как это реализовать.