我正在使用Devise和Pundit创建一个应用程序来创建用户并为他们分配角色。
有了这个,我想在我的应用程序中使用基于角色的视图。我很难想到如何做到这一点。
当您登录时,如果您是user
,则应重定向到user
主页视图。如果您是manager
,则应重定向到manager
主页视图。
在高层次上编写逻辑的最佳方法是什么?它应该存在于一个控制器,一个视图中,也许利用局部来保持干燥......
任何提示都表示赞赏。
答案 0 :(得分:0)
查看rolify gem以分配和检查用户的角色。在我有限的经验中,非常明显的逻辑在哪里,通常在控制器中,如果你要重定向或渲染不同的视图。有时候把它放在一个视图中是不合理的 - 例如,如果你有一个页面列出了一堆对每个人都相同的项目,除了你想要显示"删除"仅当当前用户是管理员时才链接到每个项目旁边。
rolify - https://github.com/EppO/rolify
答案 1 :(得分:0)
根据Single Responsibility Principle,每个对象应该做尽可能小的有用的事情。对于Rails控制器,该事情是处理请求和呈现具有关联对象的视图。所以我会把它放在一个控制器中。
Devise has a great wiki关于成功登录后重定向的主题。
答案 2 :(得分:0)
我遇到了同样的问题,我当时所做的是 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 %>