Rails - Помощь при разработке: приложение с различными уровнями привилегий пользователя - PullRequest
1 голос
/ 17 января 2011

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

Я быстро создал приложение Rails3 только для администрирования, в основном используемое для задач ввода данных об обслуживании отопительных установок.,Он состоит из около 10 моделей, и я широко использовал скаффолдинг и вложение ресурсов для создания одного приложения с полным привилегированным пользователем (администратором).В основном это системная модель со многими дочерними моделями, и каждая система принадлежит оператору.

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

Теперь вопрос ... Должен ли я:

(1) фильтровать данные в сгенерированных скаффолдами контроллерах модели?

Например (не заботится о синтаксисе, просто чтобы дать идею):

def index
  if session[:operator_id]
    @operator = operators.find(session[:operator_id])
    @systems = @operator.systems
  else if session[:admin] == true
    @systems = System.all
  end
end

(2) Написать различные контроллеры для операторов, ограничивающих привилегии?

Замена сгенерированной каркасом структуры одной папкой для контроллеров администратора, например, с операторами System.all, а второй - для контроллеров операторов, например, с операторами @ operator.systems.

(3) Разделить на отдельные приложения?

Чтобы сохранить структуру, созданную скаффолдами?Вы говорите «НЕТ! НЕТ! НЕТ!», Верно?

(4) Надеетесь получить лучшее предложение от опытных пользователей stackoverflow?

Спасибо всем ...

1 Ответ

0 голосов
/ 17 января 2011

С точки зрения производительности лучше всего фильтровать строки по операторам, как показано в 1.

В целях безопасности вы также должны выполнить проверку before_filter ваших контроллеров, чтобы оператор 1 не мог просматривать данные других операторов. Например, если система 1 принадлежит оператору 1, вам необходимо убедиться, что оператор 2 не может набирать в браузере systems / 1 и просматривать данные (при условии, что system / 1 имеет вид: controller =>: system,: action =>: show,: id => 1)

Если производительность не большая проблема, вы можете взглянуть на Плагин авторизации , он позволяет авторизацию экземпляра объекта на основе ролей с классным синтаксисом для проверки прав :)

...