1

我正在使用 Devise 和 Pundit 创建一个应用程序来创建用户并为他们分配角色。

有了这个,我想在我的应用程序中拥有基于角色的视图。我很难思考如何使这成为可能。

当你登录时,如果你是一个user你应该重定向到user主视图。如果你是一个manager你应该重定向到一个manager主视图。

在高层次上,编写该逻辑的最佳方式是什么?如果它存在于控制器、视图中,或许可以利用部分来保持干燥......

任何提示表示赞赏。

4

3 回答 3

0

查看用于分配和检查用户角色的 rolify gem。在我有限的经验中,该逻辑的去向非常明显,如果您要重定向或呈现不同的视图,通常在控制器中。有时将其放在视图中并非不合理 - 例如,如果您有一个页面列出了对每个人都相同的一堆项目,除了您希望仅在当前用户的情况下在每个项目旁边显示“删除”链接是管理员。

rolify - https://github.com/EppO/rolify

于 2014-03-21T01:31:41.297 回答
0

根据单一职责原则,每个对象都应该做尽可能少的有用的事情。对于 Rails 控制器,那是处理请求和渲染带有关联对象的视图。所以我会把它放在一个控制器中。

Devise 有一个很棒的 wiki,主题是成功登录后重定向。

于 2014-03-21T01:35:05.463 回答
0

我遇到了同样的问题,我所做的是

1-在用户表中创建角色列

2-在用户模型中创建枚举

enum role: [:Manager, :Developer, :Quality]

3-创建三个部分

  1. _manager.html.erb
  2. _developer.html.erb
  3. _quality.html.erb

4- 创建 index.html.erb 并输入以下内容

<% if current_user.Manager? %>
<%= render "dashboard/manager" %>
<% elsif current_user.Developer?%>
<%= render  "dashboard/developer" %>
<% else %>
<%= render  "dashboard/quality" %>
<% end %>

感谢:具有不同仪表板的多个设计用户

于 2019-07-19T10:20:33.630 回答