我有一个要尝试使用适当授权设置的网上论坛资源。

我尝试实现的授权逻辑是这样的:

  • 只有论坛成员才能查看他们的论坛。
  • 管理员可以查看任何组,也可以执行其他操作。

  • 我正在尝试使用组 Controller 中的以下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
    

    最佳答案

    更新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
    

    关于ruby-on-rails - 用于correct_user和admin的多个before_filter语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10150098/

    10-09 20:51