如果我有一个像下面那样的控制器,保护我的节目动作的最佳方法是什么? 当前设置的方式任何用户都可以查看仅具有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
答案 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的帮助,您可以随时重新发布,但这非常简单。