Rails - 使用Pundit的基于角色的视图

时间:2014-03-21 00:38:18

标签: ruby-on-rails devise views partials pundit

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

有了这个,我想在我的应用程序中使用基于角色的视图。我很难想到如何做到这一点。

当您登录时,如果您是user,则应重定向到user主页视图。如果您是manager,则应重定向到manager主页视图。

在高层次上编写逻辑的最佳方法是什么?它应该存在于一个控制器,一个视图中,也许利用局部来保持干燥......

任何提示都表示赞赏。

3 个答案:

答案 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-创建三个部分

  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 %>

感谢:Multiple Devise Users with different dashboards