布尔表列,用户只能更改为'false'

时间:2014-03-01 23:08:00

标签: ruby-on-rails activerecord ruby-on-rails-4

我想知道这是可能的,还是我需要以不同的方式对其进行建模。我有一个表列,可以有'true'或'false'值。我有两种类型的用户,常规用户和编辑器。这是Post的基本模型:

create_table "post", force: true do |t|
    t.boolean  "post_visible",          default: false
end

普通用户可以创建帖子,但在网站上不会立即显示帖子。编辑器需要将布尔列post_visible设置为“true”。发布后,常规用户可以将post_visible更改回false。如何才能让编辑器将post_visible列设置为truefalse,将常规用户设置为false

编辑

  • 可以将post_visible列更改为truefalse

普通用户

  • 只能将post_visible列更改为false

用户表有列is_editor,如果用户是普通用户,则为false;如果用户是编辑者,则为true。安全性因此我可以通过帮助程序轻松访问当前用户权限,如下所示:current_user.is_editor

有任何建议如何实现这一目标? :)

3 个答案:

答案 0 :(得分:1)

模型文件中的

before_validation :make_false_if_regular

private

def make_false_if_regular
  if user.type == "regular"
    post.post_visible = nil
  end
end

答案 1 :(得分:1)

我认为您应该考虑使用两个字段而不是一个:is_reviewed和is_visible。编辑器可以编辑这两个字段,常规用户只能更改is_visible。如果该帖子经过审核并且可见,则会发布该帖子。如果你这样做,请确保普通用户无法批量分配is_reviewed。

答案 2 :(得分:0)

是的,你做得很好。现在,您已限制对用户的访问权限。为此,您需要一些授权,以便您可以检查请求是否合法。最着名的方法是使用康康宝石(https://github.com/ryanb/cancan),您也可以创建自己的授权系统。