2008-08-28 4 views
2

Я использую Ruby on Rails для внутреннего сайта. Различные пользователи сайта имеют доступ к широкому спектру данных и очень разрозненные перспективы данных. В этих разных классах пользователей должны быть уровни доступа. В пределах уровней доступа мне нужно иметь возможность добавлять функции от других классов пользователей.Как запрограммировать пользовательские настройки

В выпущенной версии «Версия 1.0» на интранет-сайте я реализовал общие классы пользователей. Теперь мне необходимо реализовать намного более тонкий контроль доступа пользователей.

Вопрос в том, как?

Какова общепринятая практика кодирования пользовательских настроек (отображение карты (или нет), доступ к этой функции, но не эта функция), не взорвав схему базы данных и заполняя код вида <%, если feature_allowed% > везде.

ответ

3

Другой совершенно другой подход будет использовать acts_as_authenticated и авторизации плагинов. Таблицы будут построены плагинами (т.е. пользователями, ролями и ролями _users). Из док:

Плагин авторизации обеспечивает следующее:

  • Простой способ проверки авторизации на любом уровне класса или метод экземпляра с помощью #permit и #permit?

  • Авторизация с использованием ролей для всего приложения, класса модели или экземпляра модели (т. Е. Конкретного объекта).

  • Некоторые английские динамические методы, которые используют определенные роли. Вам будет , способным использовать такие методы, как «user.is_fan_of angelina» или «angelina.has_fans?», , где «вентилятор» определяется только в таблице ролей.

  • Выбирайте микшер для желаемого уровня сложности базы данных. Для всех функций, вы хотите использовать «объект таблицы ролей» (смотри ниже)

2

заселение код вида с <%, если feature_allowed%> теги везде.

Я не думаю, что вы хотите это сделать. Предполагая, что ни один из предложенных альтернатив практически невозможен, по крайней мере вам следует рассмотреть возможность переноса этих проверок на ваши контроллеры, где вы можете реорганизовать их в файл before_filter.

См. Раздел 11.3 в «Agile Web Development With Rails» (стр. 158 в моей копии 2-го издания), где они делают именно это.

Смежные вопросы