Вопрос

Мне очень нравятся рельсы авторизации GEM Может может. Отказ Тем не менее, я нахожусь с несколькими условиями на определенные привилегии, и я хотел бы, чтобы иметь возможность дать пользователю разные сообщения об ошибках, в зависимости от того, почему он или ей был отказан в доступе.

У Cancan есть механизм для такого поведения? У меня проблемы с нахождением этого. Буду ли я надоедать и добавить это поведение сам?

Это было полезно?

Решение

Я не думаю, что вы можете сделать это с канканским прямо из коробки. Это действительно только для того, чтобы сказать, может ли пользователь или не может сделать что-то.

Интересно, можете ли вы использовать его нетипичным образом, хотя, определяя несколько Ability подклассы для проверки разрешений. Реализация по умолчанию является создание экземпляра Ability для текущего пользователя и допросить это.

Если вы создали коллекцию Ability Подклассы, чтобы отразить различные виды доступа, которые вы хотите проверить, вы можете попросить каждого по очереди, может ли пользователь или не может сделать что-то. Первый отказывается от разрешения, будет затем использоваться для создания вашего конкретного сообщения об ошибке.

Вам действительно нужно только создать всеобъемлющий класс способностей для объединения коллекции Ability подклассы и создайте это в current_ability Метод, который Cancan предоставляет вернуть возможность текущего пользователя. Затем, предоставив одинаково can? а также cannot? Методы в вашем классе он будет работать так же, как обычные способности, но вы сможете продлить его для обеспечения why? метод, который может идентифицировать, какой Ability Подкласс отказался от разрешения и генерировать другое сообщение об ошибке в результате.

На самом деле, вам придется обеспечить новую реализацию authorize! ТОО, чтобы заставить его вернуть сообщение об ошибке, которое вы хотели.

Извините, длительный ответ, который в основном - вам придется сделать это самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top