ruby on rails 3-我应该为此使用授权gem还是使用简单的before_filter方法



我有两种类型的用户:用户和编辑器。我有一个带有布尔列is_editorUser模型,用于确定用户是否是编辑器。

让我们假设一下。用户Foobar决定注册成为一名编辑。他成功了。从今天起,他就是一名编辑。有一天,Foobar意外地导航到编辑器注册页面(注册控制器,新操作)。

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

如果我最终使用坎昆方法。问题是,我已经有了以下内容来检查其他授权。

  rescue_from CanCan::AccessDenied do |exception|
    flash[:alert] = exception.message
    redirect_to root_url
  end

它将呈现一条闪烁警报消息:You are not authorized并重定向到根url。这不是我想要的,因为我需要重定向到Foobar的个人资料。

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

老实说,这似乎很小,所以无论你选择什么,我都不会对你的方法感到不好。就我个人而言,我会选择你的第二个选项(简单重定向)。首先,它看起来更简单,这总是一个优点。如果您使用的是像Devise这样的身份验证解决方案,那么您可能有一个current_useruser_signed_in?助手,可以很容易地在before过滤器中使用。其次,我并没有真正意识到授权所涉及的问题类型。

从某种意义上说,这是一个权限问题(我想从语义上来说),因为您的应用程序定义了"不允许"的行为。实际上,这是不允许的,但不是因为用户没有必要的权限。不允许这种行为的原因是,任何用户都不应该注册为他们已经注册的同一类型的用户——也就是说,没有任何用户类型应该能够做这样的事情,所以当前登录的用户的权限是没有意义的。您的问题似乎应该通过定义应用程序行为而不是用户权限来解决。

按照我的看法,可以随意实施任何你认为最适合的解决方案。

最新更新