【问题标题】:How to handle cases in which the generated content depends on the current user authorization?如何处理生成内容依赖于当前用户授权的情况?
【发布时间】:2012-07-31 16:56:03
【问题描述】:

我正在使用 Ruby on Rails 3.2.2,并且由于我的系统实现,我想根据“访问-”生成不同的输出(在视图中)和/或检索不同的记录(在控制器中) er” 用户授权(例如,授权可能取决于“access-ed”用户 is 还是 not当前的“访问-er”用户)。

我该如何处理这种情况?也就是说,例如为了处理用户是否是当前用户并显示不同的内容,我应该为每种情况实现两个视图文件和/或控制器操作,还是应该直接使用if else 语句视图文件和/或在控制器操作中?

【问题讨论】:

  • 什么?你的问题难于理解吗?

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller implementation


【解决方案1】:

我建议的一种更简洁的方法是为用户创建不同的角色并将它们分组。因此,对于该特定组,您可以拥有单独的视图文件和控制器。这种方法的一个优点是它很容易阅读代码,我们可以很容易地理解代码。我们可以轻松地对页面进行更多控制,而不必担心其他用户。我们甚至可以避免对许多过滤器的需求。但是如果只有两种类型的用户,那么使用 if else 语句可以轻松管理,因此选择正确的方法也将取决于问题。

【讨论】:

  • “用户的不同角色并将它们分组”是什么意思?也就是说,您将如何对用户进行分组?您指的是什么“种类”/“类型”的角色?
  • 可以有不同类型的用户,例如管理员、数据输入用户、普通用户,这取决于应用程序,因此您可以为他们分配某种角色。
【解决方案2】:

我通常在视图中使用 if else 语句,如果语句之间有很多标记以保持简洁,则呈现部分语句。

这是一种风格选择,因此如果您发现您在每个页面上都创建了大量条件,那么您可能需要在控制器中重新考虑您的组织,甚至创建一个新资源。对于简单的事情,比如如果用户是管理员,则添加“编辑”或“删除”按钮,我会在视图中使用条件。

对于 .html.erb 标记,您可以像这样执行普通的 if/else 块:

<% if <condition> %>
  <%= render 'partial_name' %>
<% else %>
  <p>Some other content</p>
<% end %>

condition 是您的条件,例如current_user? @user

【讨论】:

  • 你说“[...]你可能需要[...]创建一个新资源”。我如何才能“意识到”/“确定”必须实施新资源?也就是说,您将如何通过实施新资源来解决我的问题?
  • 再一次,有上百万种方法可以制作任何网站,但您想要最干净、最清晰的方法。因此,如果你有一个 School 模型,它对大学和中学有各种不同的行为,也许最好将它们分成 MiddleSchool 模型和具有某种抽象 School 模块或超类的 College 模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2020-05-27
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多