2013-08-20 2 views
0

Я пытаюсь сделать следующее: У меня есть страница, которая фильтрует записи пользователей:Блокировать доступ к ссылке - Может Может Рельсы

это мой контроллер:

def index 
  if current_user.role? "producer" 
    @ search = Victim.joins (: producer). where (: producers => {: email => current_user.email}.) search (params [: search]) 
    @ @ search.paginate victims = (: page => params [: page],: per_page => 10) 
  elsif 
    @ search = Victim.search (params [: search]) 
    @ @ search.paginate victims = (: page => params [: page],: per_page => 10) 
  end 
end 

он может фильтровать индексные записи, относящиеся только к текущему пользователю. , но если текущий пользователь вводит идентификатор записи в навигационном режиме, он может видеть данные записи, которая не содержит электронной почты текущего пользователя. хотел бы знать, как обойти этот доступ и позволить текущему пользователю получить доступ к странице «показать» только запись, содержащую ваше электронное письмо, как это было сделано в «индексе».

Я любой, кто может помочь!

ответ

0

Не видя вашу текущий show метод, маршруты, или модель:

def show 
    if Branch.exists?(params[:id]) 
     @branch = Branch.find(params[:id]) 
     @branches = Victim.where (:branch_id => @branch.id) 
    else 

    if @branch.nil? || @branch.email != current_user.email 
     log_message = "Current User #{current_user.email} was blocked from viewing a branch " 
     log_message += "owned by #{@branch.email}" if @branch 
     log_message += "#{params[:id]} that does not exist" if @branch.nil? 
     logger.warn log_message 
     redirect_to action: "index" 
    else 
     logger.debug "Current User #{current_user.email} was allowed to view a branch with the email #{@branch.email}" 
    end 
end 

В принципе, в методе шоу, все, что вам нужно сделать, это проверить, что пользователь действительно имеет право видеть эту запись. Если нет, перенаправляйте их где-то в другом месте

+0

выглядит следующим образом: У меня есть таблица «жертва», и она содержит поле «branch_id» («model - victim» = belongs_to: branch) У меня также есть таблица " ветвь ", которая содержит поле« email » , у текущего пользователя есть тот же адрес электронной почты, что и« ветвь »... Итак, я хотел бы сделать: открыть« показ »« жертвы ». .email равно «current_user.email», если не было отказано в доступе. попытался больше не работать: '@branch = Branch.find (params [: id]) @branches = Victim.where (: branch_id => @branch .id) redirect_to 'index', если @ branch.email! = current_user.email' – user2701007

+0

@ user2701007 Как это не сработало? Вы получили сообщение об ошибке или разрешили пользователям просматривать ветви, которые у них не были? Я обновил решение протоколирование, которое должно помочь в отладке это – lightswitch05

+0

мне это сообщение появляется 'Обработка VictimsController # показать как HTML Параметры: {«ID»=>«973»} Завершено 500 Внутренняя ошибка сервера в 10мс ActiveRecord :: RecordNotFound (не удалось найти ветвь с id = 973): app/controllers/victim_controller.rb: 29: в 'show'' – user2701007

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