Укажите причину отрицания доступа с Cancan
-
28-09-2019 - |
Вопрос
Мне очень нравятся рельсы авторизации GEM Может может. Отказ Тем не менее, я нахожусь с несколькими условиями на определенные привилегии, и я хотел бы, чтобы иметь возможность дать пользователю разные сообщения об ошибках, в зависимости от того, почему он или ей был отказан в доступе.
У Cancan есть механизм для такого поведения? У меня проблемы с нахождением этого. Буду ли я надоедать и добавить это поведение сам?
Решение
Я не думаю, что вы можете сделать это с канканским прямо из коробки. Это действительно только для того, чтобы сказать, может ли пользователь или не может сделать что-то.
Интересно, можете ли вы использовать его нетипичным образом, хотя, определяя несколько Ability
подклассы для проверки разрешений. Реализация по умолчанию является создание экземпляра Ability
для текущего пользователя и допросить это.
Если вы создали коллекцию Ability
Подклассы, чтобы отразить различные виды доступа, которые вы хотите проверить, вы можете попросить каждого по очереди, может ли пользователь или не может сделать что-то. Первый отказывается от разрешения, будет затем использоваться для создания вашего конкретного сообщения об ошибке.
Вам действительно нужно только создать всеобъемлющий класс способностей для объединения коллекции Ability
подклассы и создайте это в current_ability
Метод, который Cancan предоставляет вернуть возможность текущего пользователя. Затем, предоставив одинаково can?
а также cannot?
Методы в вашем классе он будет работать так же, как обычные способности, но вы сможете продлить его для обеспечения why?
метод, который может идентифицировать, какой Ability
Подкласс отказался от разрешения и генерировать другое сообщение об ошибке в результате.
На самом деле, вам придется обеспечить новую реализацию authorize!
ТОО, чтобы заставить его вернуть сообщение об ошибке, которое вы хотели.
Извините, длительный ответ, который в основном - вам придется сделать это самостоятельно.