用于correct_user和admin的多个before_filter语句

时间:2012-04-14 00:55:01

标签: ruby-on-rails authorization before-filter role-base-authorization

我有一个Group资源,我正在尝试使用适当的授权进行设置。

我试图实现的授权逻辑是:

  1. 只有小组成员才能查看他们的小组。
  2. 管理员可以查看任何组,以及采取其他操作。
  3. 我正在尝试使用组控制器中的以下before_filter语句执行此操作:

    before_filter :signed_in_user
    before_filter :correct_user, only: :show
    before_filter :admin_user, only: [:show, :index, :edit, :update, :destroy]
    

    Correct_user正常运行,因为我已经确认只有群组成员才能查看他们的群组。但是,我想要发生的是使用admin:show子句来覆盖它,以便管理员可以查看任何组。目前这是行不通的。我猜我的滤镜排序和选项有问题。

    有人可以告诉我哪里出错了吗?

    修改

    根据Amar的请求添加我的方法代码:

    private
    
    def correct_user
      # User has to be a member to view
      @group = Group.find(params[:id])
      redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil?
    end
    
    def admin_user
      redirect_to(root_path) unless current_user.admin?
    end
    

1 个答案:

答案 0 :(得分:2)

更新correct_user方法或使用以下定义创建另一个方法,从其他过滤器中删除show并使用新方法添加before_filter。

def correct_user
   @group = Group.find(params[:id])
   redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil?  && !current_user.admin?
end