rails设计用户管理,我是否必须对所有视图单独进行

时间:2017-09-04 22:51:20

标签: ruby-on-rails ruby

我有设置设计,并且在http://codepany.com/blog/rails-5-user-accounts-with-3-types-of-roles-devise-rails_admin-cancancan/中建议我添加了超级用户和主管角色。现在我想只允许超级用户访问很多视图(在配置数据上做CRUD)。

我知道我可以通过在内容中包装if来实现。

 <% if current_user.superadmin_role? %>
    ...all the content...
 <% else %>
    This page is not available to you
 <% end %>

从我收集的内容中,我需要为我想要限制的所有观点执行此操作。但是想知道是否有更优雅的方式来做到这一点。即我可以做一些事情,比如将所有支票放在一个地方,只允许某些页面通过甚至禁止所有页面,并且我可以将一些代码放在公共页面上。

1 个答案:

答案 0 :(得分:0)

如果您不想显示的内容是整页,则可以通过添加来完成此操作 before_action :authenticate_admin! 在控制器。

#some_controller.rb
before_action :authenticate_admin!

def action
  ...
end

private
def authenticate_admin
  unless current_user.superadmin_role?
    redirect_to "403.html"
  end
end

或者,如果你想做非控制器级别,

#view
<div class="hide <%= 'admin' if @is_admin %>">
  hogehoge
</div>

#controller
before_action set_is_admin
def set_is_admin
  @is_admin = current_user.superadmin_role? ? true : false
end

然后添加

# application.css
<style>
.hide{
  display: none;
}
.admin{
  display: block;
}
</style>