Как получить защиту уровня действия с помощью authlogic и sti?

StackOverflow https://stackoverflow.com/questions/2249361

Вопрос

Учитывая, что хорошо документировано, как использовать перед_фильтер для одной классификации пользователя, у меня возникают проблемы с получением защиты на уровне действий для нескольких типов пользователей. Позволь мне объяснить:

У меня есть что -то подобное ...

class ApplicationController < ActionController::Base
  class << self 
    attr_accessor :standard_actions
  end
  @standard_actions = [:index, :show, :new, :edit, :create, :update, :destroy]

  def require_guardian
    unless current_user and current_user.is_a?(Guardian)
      store_location
      redirect_to home_url
      return false
    end
  end

  def require_admin
    unless current_user and current_user.is_a?(Administrator)
      store_location
      redirect_to register_url
      return false
    end
  end
end

А в GuardiansController я хочу разрешить только стандартные действия для администратора, но все остальные действия должны требовать Guardian. Итак, я попробовал это ...

class GuardiansController < ApplicationController
  before_filter :require_admin, :only => ApplicationController::standard_actions
  before_filter :require_guardian, :except => ApplicationController::standard_actions
  ...
end

Что в конечном итоге делает рекурсивное перенаправление. Должен быть лучший способ?

Это было полезно?

Решение

Хорошо, это еще один случай, когда я не смотрел и что -то пропустил. Я непреднамеренно установил маршрут для перенаправления пользователя рекурсивно. Приведенное выше решение работает просто нормально, когда вы правильно устанавливаете маршруты:

def require_guardian
  unless current_user and current_user.is_a?(Guardian)
    store_location
    # this route (home_url) sent the user to another controller which ran a before_filter sending them back here again.
    # redirect_to home_url 
    # So I changed it to a neutral route and it works great!
    redirect_to register_url
    return false
  end
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top