Model-level authorization in Rails
我想在我的Rails应用程序中在模型级别(而不是控制器)上实现授权,就像在模型上进行验证一样。最好的方法是什么?
如果在模型本身中实现,则主要问题是模型无法访问当前用户。我见过类似的解决方案:
我看到了一种不同的方法,其中创建了诸如create,find和new之类的方法的变体,并为当前用户接受了一个附加参数。
另一种方法是在User / role类中实现所有方法,例如,将使用
将建议使用这些方法中的哪些?有没有更好的方法来实现授权?是否有任何插件可以使此操作更容易?我需要一种适合多个角色和模型的方法。
我建议您查看声明性授权。它适用于模型和控制器。
它要做什么的方式是在applicationController中有一个before_filter来设置
我认为这种方法是最好的方法,它可以使模型保持整洁,并且您不必记住要在任何地方都包括用户,但是可以在模型回调函数中对其进行过滤。
您为什么要这样做?控制器级别识别还不够吗?
1 2 3 4 5 | if @user.is_able_to_do_this? do_this else blah! end |
...并在您的模型中
1 2 3 4 5 6 | def is_able_to_do_this if self.rights > Constant::Admin_level_whatever return true end return false end |