在我的控制器中,我有一个def来验证它是否是正确的用户。普通用户只能编辑,更新和销毁他自己的推文。
before_action :correct_user, only: [:edit, :update, :destroy]
现在我想授予管理员编辑,更新和销毁任何推文以及管理员推文的权利
如何组合两种定义?
private
def verify_is_admin
@card = @tweet.card.id
(current_user.nil?) ? redirect_to(root_path) : (redirect_to card_path(@card), notice: 'Not authorised to update this tweet' unless current_user.admin?)
end
def correct_user
@card = @tweet.card.id
@tweet = current_user.tweets.find_by(id: params[:id])
redirect_to card_path(@card), notice: 'Not authorised to update this tweet' if @tweet.nil?
end
答案 0 :(得分:1)
您想要在新方法中还是在现有方法中将它们组合在一起?如果你想要一个新的方法,你可以这样做:
def can_edit_tweet?
true if (currrent_user.admin? || correct_user)
end
并将您的before_action
更改为:
before_action :correct_user, only: [:edit, :update, :destroy, :can_edit_tweet?]
如果要将它们合并为一个,可以编辑correct_user
方法:
def correct_user
@card = @tweet.card.id
@tweet = current_user.tweets.find_by(id: params[:id])
redirect_to card_path(@card), notice: 'Not authorised to update this tweet' if (@tweet.nil? && !current_user.admin?)
end