Rails中的模型级授权

时间:2009-11-27 10:19:48

标签: ruby-on-rails authorization

我想在模型级别(而不是控制器)上的Rails应用程序中实现授权,方式与模型验证完成相似。这样做的最佳方式是什么?

如果在模型本身中实现,则主要问题是模型无法访问当前用户。我见过像Thread.current[:user_id] = session[:user_id]这样的解决方案,但这似乎不是一个好主意。

我已经看到了一种不同的方法,其中创建了诸如create,find和new等方法的变体,为当前用户接受了一个额外的参数。

另一种方法是实现User / role类中的所有方法,例如,将使用user.posts.createuser.readable_posts.find代替Post.createPost.find

建议采用以下哪种方法?有没有更好的方法来实施授权?是否有任何插件可以让这更容易?我需要一种能够很好地适应多种角色和模型的方法。

2 个答案:

答案 0 :(得分:1)

我建议你看看declarative authorization。它适用于模型和控制器。

你所要求的方式就是在applicationController中设置一个before_filter,它设置Authorization.current_user = current_user授权是一个模块。

我认为这种方法是最好的方法,它可以保持模型清洁,您不必记住在任何地方都包含用户,而是可以在模型回调函数中对其进行过滤。

答案 1 :(得分:0)

你为什么要这样做?控制器级别识别不够吗?

if @user.is_able_to_do_this?
  do_this
else
  blah!
end

......并在你的模特中

def is_able_to_do_this
  if self.rights > Constant::Admin_level_whatever
    return true
  end
  return false
end