【问题标题】:Rails application with multiple roles具有多个角色的 Rails 应用程序
【发布时间】:2012-10-13 04:31:29
【问题描述】:

我有一个具有 2 个角色的 Rails 应用程序,比如管理员和用户。但问题是,管理员不使用像 ActiveAdmin 这样的后端。我希望管理员和用户都看到相同的视图,但根据角色,我限制他们可以看到的内容。我正在使用 Cancan,但是由于例如管理员和用户都可以看到产品页面,因此我最终会在视图和控制器操作中出现许多条件,例如,如果这是管理员显示,则显示,而不是显示。

所以我真的不认为这是“Rails 方式”。我最终得到了许多重复的代码,并且视图中的代码并不真正支持将逻辑远离视图的想法。

所以我的问题是,实现这种具有许多角色但视图相同的场景的最佳方法是什么。

谢谢。


我目前正在考虑两种选择,但我都不喜欢。一种是将管理员重定向到另一个视图,但这样大部分视图都是相同的,因此它根本不是 DRY。 选项 2 是使用完全相同的视图,但在视图中添加了许多条件,因此我最终得到了一个带有代码的巨大复杂视图。我正在尝试找到一种方法来保持 DRY 简单,并保持视图代码免费。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以将管理模块放在单独的命名空间下,并将用户作为默认命名空间。您可以提取部分下的公共代码,并在管理和用户模块中使用相同的代码。

    通过这种方式,您可以将用户和管理员的代码分开,如果将来某个时候您决定为管理员和用户使用不同的视图。这不会是一项艰巨的任务。

    1. 将控制器设置为

      app/controllers/admin/articles ------ 管理员用户

      app/controllers/articles ----普通用户

    1. 观看次数

      应用程序/视图/管理/文章

      应用程序/视图/文章

      应用程序/视图/共享

    【讨论】:

    【解决方案2】:

    有不同的可能方法。如here 所述,我会想到“装饰器”模式的变体@

    这是我上次阅读它的时间,但我认为基本思想是将逻辑放入模型或助手中。一旦用户登录,您就可以查看他是管理员还是普通用户,您有方法可以返回必要的 html 或文本。

    一种更简单的方法是对所有内容只使用两个部分。正如罗斯在单独的管理命名空间中所说,或者更简单(但如果您以后需要更改它,则需要更多工作),就像 _user_view_something.html.erb 和 _admin_view_something.html.erb 一样。

    DCI 模式中也有类似的想法。 This Blog 给出了一些很好的概述,它如何在 Rails 中发挥作用。这篇文章更多是关于权限的,但基本思想还是用必要的功能来补充用户对象。

    因此,您拥有基本的“do_something”方法,它可以在视图中呈现某些内容或放置一些信息,并将其替换为适合实际用户角色的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多