使用Devise in Rails保护操作

时间:2017-01-29 03:39:07

标签: ruby-on-rails ruby devise

如果我有一个像下面那样的控制器,保护我的节目动作的最佳方法是什么? 当前设置的方式任何用户都可以查看仅具有id的其他用户的注释。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

身份验证是一回事,但授权是另一回事。现在,(如果我理解正确的话),如果有任何用户登录,他们可以查看其他人的凭据等,您不希望这样。这是可以理解的。

您必须实施CanCanCan - 或某些此类gem。阅读起来并不困难 - 在大约30-45分钟内你可以将其解决并设置任何你想要的权限。

https://github.com/CanCanCommunity/cancancan

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

请注意,CanCan已过时,不再维护。

如果您需要CanCanCan的帮助,您可以随时重新发布,但这非常简单。