Rails CanCan и динамически генерируемые способности
Я хотел бы использовать CanCan поверх приложения Rails 3, основанного на Mongoid. Я хотел бы представить общие модели для пользователя, роли и привилегий. По сути, система авторизации должна авторизоваться на основе каждого действия. Поэтому мы хотим хранить привилегированные объекты действий х ролей.
Теперь, когда дело доходит до способности DSL, мы можем динамически генерировать способности как ловушку after_save в модели proivilege. Но это приводит к проблеме в рабочем режиме, потому что эти изменения времени выполнения влияют только на процесс сервера, на котором были изменены привилегии.
С другой стороны, можно переоценить все (пользовательские) способности как before_filter в каждом контроллере. Но это замедляло каждый запрос.
Только сейчас мы не решили, как решить эту проблему. Я благодарен за каждое предложение.
С уважением, Феликс
1 ответ
CanCan использует простую систему авторизации на основе столбца ролей в модели User.
Вот несколько хороших ссылок: Способности
Ролевая авторизация
Зачем вам нужно динамически устанавливать привилегии? Если у вас нет веских причин для этого, вы просто вносите ненужную сложность. Просто определите роли, которые вам нужны, с правильными способностями (вы можете сделать это на основе контроллера / действия с помощью cancan), а затем назначьте эти роли при создании / обновлении.