Rails CanCan и динамически генерируемые способности

Я хотел бы использовать CanCan поверх приложения Rails 3, основанного на Mongoid. Я хотел бы представить общие модели для пользователя, роли и привилегий. По сути, система авторизации должна авторизоваться на основе каждого действия. Поэтому мы хотим хранить привилегированные объекты действий х ролей.

Теперь, когда дело доходит до способности DSL, мы можем динамически генерировать способности как ловушку after_save в модели proivilege. Но это приводит к проблеме в рабочем режиме, потому что эти изменения времени выполнения влияют только на процесс сервера, на котором были изменены привилегии.

С другой стороны, можно переоценить все (пользовательские) способности как before_filter в каждом контроллере. Но это замедляло каждый запрос.

Только сейчас мы не решили, как решить эту проблему. Я благодарен за каждое предложение.

С уважением, Феликс

1 ответ

CanCan использует простую систему авторизации на основе столбца ролей в модели User.

Вот несколько хороших ссылок: Способности
Ролевая авторизация

Зачем вам нужно динамически устанавливать привилегии? Если у вас нет веских причин для этого, вы просто вносите ненужную сложность. Просто определите роли, которые вам нужны, с правильными способностями (вы можете сделать это на основе контроллера / действия с помощью cancan), а затем назначьте эти роли при создании / обновлении.

Другие вопросы по тегам