6

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

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

  1. 只有群组成员才能查看他们的群组。
  2. 管理员可以查看任何组,也可以执行其他操作。

我正在尝试使用组控制器中的以下 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
4

1 回答 1

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
于 2012-04-21T05:28:12.847 回答