【问题标题】:Multiple before_filter statements for correct_user and admin用于正确用户和管理员的多个 before_filter 语句
【发布时间】:2012-04-14 00:55:01
【问题描述】:

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

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

  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

【问题讨论】:

  • 在正确用户上方的过滤器之前尝试 admin_user 或在显示操作中为管理员用户和其他用户设置条件
  • 谢谢阿马尔。我尝试将 admin_user 过滤器放在 correct_user 之上,但这并没有解决它。我可以将条件放在操作中,但想看看是否有办法使用 before_filter。
  • 进一步检查我在过滤器上方写的方式要求用户既是管理员又是正确用户才能查看组。我希望它是或
  • 你能用调试器调试你的方法还是撬开你可以清楚地知道哪里出了问题,可能是你做对了,或者你可以发布代码以便我深入研究它。
  • 感谢您的帮助,阿马尔。刚刚贴出上面的方法代码。

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


【解决方案1】:

更新正确的用户方法或使用以下定义创建另一个方法,从其他过滤器中删除显示并使用新方法添加 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-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多