Проблема с рельсами + JSON - PullRequest
0 голосов
/ 02 июня 2011

Администратор моего контроллера

  def index_all_for_question_id

      @answers      = Question.find(params[:id]).answers


    respond_to do |format|
      format.ext_json { render :json => @answers.to_ext_json(:class => Answer, :include => [:respondent]) }
    end
  end

мой dataStore в extJS

 var answers_datastore = new Ext.data.Store({
    autoLoad: true,
    proxy: new Ext.data.HttpProxy({
       url: '/answers/index_all_for_question_id/<%= @questions.first.id %>?format=ext_json',
        method: 'GET'}),
        reader: answers_reader
        });

Мой вопрос: когда я пытаюсь войти localhost:3000/answers/index_all_for_question_id/551?format=ext_json например,

Я получаю:

{"results":2,"answers":[{"answer":{"scale":1,"inquiry_id":277,"created_at":"2011-05-30T07:10:22Z","updated_at":"2011-05-30T07:10:22Z","text":"dfgfdghfdhfdh","id":275,"respondent":{"created_at":"2011-05-16T06:47:08Z","updated_at":"2011-05-16T06:47:08Z","id":109,"user_id":6,"email":"xxx@xxx"}}},{"answer":{"scale":1,"inquiry_id":278,"created_at":"2011-05-31T12:33:36Z","updated_at":"2011-05-31T12:33:36Z","text":"lolololol","id":290,"respondent":{"created_at":"2011-05-25T11:22:55Z","updated_at":"2011-05-25T11:22:55Z","id":110,"user_id":6,"email":"xxx@xxx"}}}]}

ТАК, я не знаю, что это! Каждый пользователь может ввести эту строку, я получаю ответы (если он не админ). Как я могу решить эту проблему? Это могут видеть только администраторы, для других нужно перенаправить на какую-то страницу или появляется текст «Извините!».

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Я бы использовал HTTP-аутентификацию . Перенаправление немного сложно реализовать, вот пример (с использованием сессий):

class AdminController < ApplicationController
  before_filter :authenticate

  USER_NAME = "admin"
  PASSWORD = "xyz" # PS: you should use hashed passwords

  def admins_only
    render :text => "TOP SECRET STUFF!"
  end

  protected

  def authenticate
    if authenticate_with_http_basic { |u,p| u == USER_NAME && p == PASSWORD }    
      true
    else
      if session[:http_auth_requested]
        session[:http_auth_requested] = nil
        redirect_to '/sorry_page' and return false
      end

      session[:http_auth_requested] = 1
      request_http_basic_authentication
    end
  end
end
0 голосов
/ 02 июня 2011

Привет, я думаю, что самое простое решение - написать пользовательский before_filter, где вы можете проверить, есть ли у пользователя роль администратора, и перенаправить на какую-либо страницу, если нет, вы также можете использовать CanCan для целей авторизации

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