rails设置正确的用户并验证用户是否为admin

时间:2015-10-15 23:20:15

标签: ruby-on-rails twitter

在我的控制器中,我有一个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

1 个答案:

答案 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