我正在使用 Devise 和 Pundit 创建一个应用程序来创建用户并为他们分配角色。
有了这个,我想在我的应用程序中拥有基于角色的视图。我很难思考如何使这成为可能。
当你登录时,如果你是一个user
你应该重定向到user
主视图。如果你是一个manager
你应该重定向到一个manager
主视图。
在高层次上,编写该逻辑的最佳方式是什么?如果它存在于控制器、视图中,或许可以利用部分来保持干燥......
任何提示表示赞赏。
我正在使用 Devise 和 Pundit 创建一个应用程序来创建用户并为他们分配角色。
有了这个,我想在我的应用程序中拥有基于角色的视图。我很难思考如何使这成为可能。
当你登录时,如果你是一个user
你应该重定向到user
主视图。如果你是一个manager
你应该重定向到一个manager
主视图。
在高层次上,编写该逻辑的最佳方式是什么?如果它存在于控制器、视图中,或许可以利用部分来保持干燥......
任何提示表示赞赏。
查看用于分配和检查用户角色的 rolify gem。在我有限的经验中,该逻辑的去向非常明显,如果您要重定向或呈现不同的视图,通常在控制器中。有时将其放在视图中并非不合理 - 例如,如果您有一个页面列出了对每个人都相同的一堆项目,除了您希望仅在当前用户的情况下在每个项目旁边显示“删除”链接是管理员。
rolify - https://github.com/EppO/rolify
根据单一职责原则,每个对象都应该做尽可能少的有用的事情。对于 Rails 控制器,那是处理请求和渲染带有关联对象的视图。所以我会把它放在一个控制器中。
Devise 有一个很棒的 wiki,主题是成功登录后重定向。
我遇到了同样的问题,我所做的是
1-在用户表中创建角色列
2-在用户模型中创建枚举
enum role: [:Manager, :Developer, :Quality]
3-创建三个部分
4- 创建 index.html.erb 并输入以下内容
<% if current_user.Manager? %>
<%= render "dashboard/manager" %>
<% elsif current_user.Developer?%>
<%= render "dashboard/developer" %>
<% else %>
<%= render "dashboard/quality" %>
<% end %>