2017-01-29 4 views
0

Если у меня есть контроллер, подобный приведенному ниже, что лучший способ защитить мое шоу? Способ, которым он в настоящее время настроен, позволяет любому пользователю просматривать примечание другого пользователя только с идентификатором.Защитите действия с помощью Devise in Rails

class NotesController < ApplicationController 
    before_action :authenticate_user! 

    def index 
     @notes = Note.where(user_id: current_user) 
    end 

    def show 
     @note = Note.find(params[:id]) 
    end 

    def new 
     @note = current_user.notes.build 
    end 

end 

ответ

3

Метод: 1

def show 
    @note = Note.find(params[:id]) 
    redirect_to anywhere_you_want, notice: "can't see others note" if @note.user != current_user 
end 

Метод: 2

создать before_action как:

before_action :authenticate_note_user, only: [:show] 
private 
def authenticate_note_user 
    @note = Note.find(params[:id]) 
    redirect_to anywhere_you_want, notice: "can't see others note" if @note.user != current_user 
end 
0

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

Вам понадобится реализовать CanCanCan - или некоторый такой драгоценный камень. Это не так сложно прочитать - примерно через 30-45 минут вы можете сыграть роль и установить права на все, что захотите.

https://github.com/CanCanCommunity/cancancan

http://railscasts.com/episodes/192-authorization-with-cancan

Пожалуйста, обратите внимание, что CanCan не является устаревшим и больше не поддерживается.

Если вам нужна помощь в CanCanCan, вы всегда можете отправлять сообщения, но это очень просто.