Rails 3 ActiveAdmin。如何为具有非管理员角色的用户禁用仪表板?

时间:2012-01-20 22:58:36

标签: ruby-on-rails ruby cancan activeadmin

这就是我可以看到用户角色的方式:current_admin_user.role

我正在使用CanCan

我怎么能

  1. 隐藏仪表板按钮
  2. 如果用户发现它是网址,则限制对信息中心的访问
  3. - 我试过这个但是没有用。

    dashboard_controller.rb
    if current_admin_user.role == 'customer'
      redirect_to shipments_path
    end
    

    我在admin / dashboards.rb

    中尝试了这个
    controller do
      def scoped_collection
        if current_admin_user.role == 'customer'
          redirect_to shipments_path
        end
      end
    end
    

    但会产生错误undefined method 'controller' for ActiveAdmin::Dashboards:Module (NoMethodError)

3 个答案:

答案 0 :(得分:3)

我想你知道这个地方:https://github.com/gregbell/active_admin/issues/501,关于那边的仪表板的一些好主意。

使用以下内容在dashboards.rb文件中渲染部分:

ActiveAdmin::Dashboards.build do

  section 'Common', :priority => 1 do
    div do
      render 'common_dashboard'
    end
  end
  ...
end

然后从你应该在app / views / admin / dashboard / _common_dashboard.html.erb创建的partial,你可以访问current_admin_user对象:

<ul>
  <li><%= current_admin_user.role %></li>
</ul>

从dashboards.rb'''环境'''访问current_admin_user的另一种方法是使用arbre语法并制定仪表板部分,如此

section "Common",:priority => 1 do 
  div do     
    if current_admin_user.role == "customer"
      li "You are a customer"
    end
  end
  '' 
end

答案 1 :(得分:1)

您也可以使用以下条件限制仪表板部分: 因此,所有用户都可以使用仪表板,但只允许使用允许的部分

section("Recent Users", :if => proc{ can?(:manage, User) }) do
  ul do
    User.limit(10).order('created_at desc').collect do |user|
      li link_to(user.name, admin_user_path(user))
    end
end

答案 2 :(得分:1)

您可以通过这种方式在仪表板部分内访问控制器操作redirect_to

section do
  if current_admin_user.role == 'customer'
    controller.redirect_to shipments_path #any path you have in application
  else
    div do
    ...
    end
  end