【问题标题】:Routing for Multiple User Roles多用户角色的路由
【发布时间】:2014-01-24 18:16:27
【问题描述】:

我有一个区分为 6 个角色的用户模型,我定义了不同的变量并将它们定向到不同的视图文件(类似的格式,但不同的信息表),但在同一个控制器操作中,因为它们都有相似的页面“概述”、“个人资料”、“消息”等。

现在控制器真的很乱,并且有多个 if/else 语句。我相信我应该更改路由,以便每个用户都有自己的控制器,从而消除当前侵入控制器的 if/else 怪物的使用。

def index
  if current_user.admin?
    ....
  end
  if current_user.moderator?
   ....
  end
end

问题:我如何执行路由,这样 url 将是 www.website.com/1/schedule,其中 1 = current_user.id,同时从不同的控制器呈现不同的视图文件?

我正在考虑使用 AdminController 和 ModeratorController 来处理此问题,但不确定如何进行路由,或者这是否确实是最好的方法。提前感谢您的建议!

【问题讨论】:

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


【解决方案1】:

我认为你这样做是错误的,如果你有不同角色的相似页面,那么我认为你正在访问相同的模型来处理不同的角色。

如果是这种情况,那么您应该使用像 Cancan 这样的 Gem(Ruby on Rails 的授权库)。

【讨论】:

  • 我没有授权操作。我将完全转到不同的页面。管理员将呈现“admin_overview.html.slim”
【解决方案2】:

为了解决您的第二个问题,我认为这不是最好的方法。试试这个 - 将你的逻辑从多个控制器中移开,并将逻辑保留在 ApplicationController 中。我认为您不应该将不同的角色与控制器分开。相反,请查看您的 User 模型并放入一个方法来检查不同用户的权限级别。您可以在您的用户模型中创建可以在控制器中调用的方法,以查看是否允许用户访问该操作。这里推荐before_action

如果您决定保留多个控制器,我建议您使用像权威这样的宝石。让跟踪不同的权限变得更加容易,甚至跨不同的控制器 - 我认为路由也得到了解决:https://github.com/nathanl/authority

【讨论】:

  • 我目前在应用程序控制器中有这些查询方法,这就是我分别在索引方法中测试用户角色的方式。我只是想知道 if-else 语句是否有一种很好的方法可以分解成更好的结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2021-09-20
  • 2015-01-30
  • 2019-09-21
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多