限制为非管理员用户选择选项

时间:2014-02-04 22:26:09

标签: ruby-on-rails filter

我有一个选项下拉列表,目前从问题数据库中选择所有“类别”。即,有100个问题和5个类别,因此每个类别有20个问题。

如果当前用户不是管理员,则会为他们分配一个类别。

如何将选择限制为仅指定的类别问题?

我认为我可以从视图中轻松完成此操作,但是从控制器/模型做起来不是更好吗?

1 个答案:

答案 0 :(得分:2)

这绝对是更适合控制器/模型级别的东西。在我的书中,在前端做安全是一个很大的禁忌。你想要这样的东西:

控制器:

@categories = Category.editable_by(current_user)

模型

def self.editable_by(user)
  user.admin? ? all : scoped_to(user)
end

private

def scoped_to(user)
  where(category_id: user.category_id)
end

不确定你的架构是什么样子......但是那个棒球场应该做的事情。

编辑:在这种情况下不确定,但scoped_to可能需要def self.scoped_to。我忘了它如何与私有范围一起使用。