Может кто-нибудь объяснить "Авторизация собственности" (см. Railscasts)? - PullRequest
0 голосов
/ 06 января 2010

Может кто-нибудь объяснить "Авторизация владения"?

Я прошел через Railscasts '- 7 советов по безопасности , и мне было интересно, как выглядит "current_user.projects.find"реализовано?

# projects_controller.rb
def show
  @project = current_user.projects.find(params[:id])
end

Спасибо!

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Для вызова метода, подобного current_user, сначала потребуется какая-то система аутентификации. Я рекомендую вам взглянуть на devise или omniauth (позволяет использовать Facebook, Twitter и т. Д.).

Что касается метода current_user, как я уже сказал, он требует более сложной системы аутентификации и модели User, чтобы он имел смысл. Но он определяется как вспомогательный метод в ApplicationController.rb примерно так:

class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :current_user

  private  
  def current_user  
    @current_user ||= User.find(session[:user_id]) if session[:user_id]  
  end
end

Надеюсь, это поможет!

0 голосов
/ 07 января 2010

На самом деле я понял, что ответ довольно прост, и это в Railscast прилагается к сообщению.

Изначально @project был получен с помощью этой конструкции:

def show
  @project = Project.find(params[:id])
end

Все, что было нужно, это использовать ассоциацию activerecord, выполнив

@project = current_user.projects.find(params[:id]) 
0 голосов
/ 06 января 2010

Это определяет user.projects:

class User 
  has_many :projects
end

Хорошо, если вы имеете в виду, что с реализованным, в противном случае посмотрите на исходный код activerecord:)

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