我应该为此使用授权gem还是使用简单的before_filter方法?

时间:2011-06-16 17:55:40

标签: ruby-on-rails-3 authorization cancan

我有两种类型的用户:用户和编辑器。我有一个带有布尔列User的{​​{1}}模型来确定用户是否是编辑。

我们假设。用户Foobar决定以编辑身份注册。他成功了。从今天开始,他是一名编辑。有一天,Foobar不小心导航到编辑注册页面(注册控制器,新动作)。

由于Foobar已经是编辑,我应该将他重定向到他的个人资料页面。我应该使用授权gem(例如Cancan)吗?或者我应该在注册控制器中有一个简单的方法(即before_filter:check_if_user_is_not_an_editor)来检查用户是否已经是编辑器并重定向?

如果我最终使用Cancan方法。问题是,我已经有以下检查其他授权。

is_editor

这将呈现一条闪光警报消息: rescue_from CanCan::AccessDenied do |exception| flash[:alert] = exception.message redirect_to root_url end 并重定向到根网址。这不是我想要的,因为我需要重定向到Foobar的个人资料。

你有什么想法?这是授权的任务还是只是在所述控制器中的简单重定向?哪种方法更合适?

1 个答案:

答案 0 :(得分:1)

老实说,看起来很小,所以不管你选择什么,我都不会对你的方法感到不好。就个人而言,我会选择你的第二个选项(简单重定向)。首先,它似乎更简单,这总是一个加号。如果您正在使用像Devise这样的身份验证解决方案,那么您可能有一个current_useruser_signed_in?帮助程序,您可以在之前的过滤器中轻松使用它。其次,它并没有真正打击我作为授权所涉及的问题类型。

从某种意义上说,这是一个权限问题(我猜在语义上无论如何),因为你的应用程序定义了“不允许”的行为。实际上,这是不允许的,但不是因为用户没有必要的许可。不允许这种行为的原因是因为没有用户应该能够注册为他们已经注册的相同类型的用户 - 也就是说,没有用户类型应该能够做到这一点,所以当前 - 在用户的权限中记录是没有实际意义的。似乎应该通过定义应用程序行为来解决您的问题 - 而不是用户权限。

就像我看待事物的方式一样,随意实施您认为最合适的解决方案。