Авторское удаление (и не только это) - PullRequest
0 голосов
/ 21 августа 2010

Давайте посмотрим на контроллер:

def destroy
    if session[:user_id] && User.find(session[:user_id]).is_admin
          @exam = Exam.find(params[:id])
          @exam.destroy
    else
          redirect_to :back, :notice => "You cant do that!"
          return
    end
      redirect_to :root
    end 

его в контроллере экзаменов Но я хочу аналогично иметь эту функциональность, скажем, User_controller.Как правильно не повторяться?

Ответы [ 2 ]

0 голосов
/ 22 августа 2010

Общий способ сделать это - добавить к вашему application_controller.rb метод, который проверяет сеанс пользователя (возможно, передает пользователя) и, если пользователь найден в сеансе, проверяет, является ли этот пользователь is_admin в соответствии с вашимcode.

Затем от каждого из ваших других контроллеров, так как они расширяются от ApplicationController, добавьте before_filter :check_for_admin, :only => :destroy (или как вы называете ваш метод) к любому из действий, которые вас интересуют.Вы можете повторить строку before_filter... в верхней части всех контроллеров, где вы хотите использовать это.Логика авторизации извлекается в свой собственный метод.Мы использовали такую ​​настройку с AuthLogic в нескольких проектах, вы можете найти конкретные примеры кода в Google, но опять же, общий шаблон - извлечь общий код контроллера в контроллер приложения и вызвать его с before_filter.

0 голосов
/ 21 августа 2010

Есть несколько вещей, которые повторяются.Для поиска я рекомендую унаследованные ресурсы , а для авторизации это более сложно.Мы используем #may_be_deleted_by?(user) (или обновлено / просмотрено) для каждой модели и подключаем чек внутри build/create/delete/update_resource IR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...