Rails CanCan и динамически генерируемые способности - PullRequest
0 голосов
/ 12 июля 2011

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

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

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

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

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

1 Ответ

0 голосов
/ 12 июля 2011

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

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

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

...