Rails 3 ActiveAdmin. Как отключить панель мониторинга для пользователей с правами администратора? - PullRequest
4 голосов
/ 21 января 2012

Вот как я вижу роль пользователя: current_admin_user.role

Я использую CanCan

Как я могу

  1. Скрыть кнопку на приборной панели
  2. Ограничить доступ к панели инструментов на случай, если пользователь узнает ее URL

- Я пробовал это, но не работает.

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 ]

3 голосов
/ 26 января 2012

Я думаю, вы знаете это место: 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, вы можете получить доступ к объекту current_admin_user:

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

Еще один способ получить доступ к current_admin_user из dashboards.rb '' 'environment' '' - это использовать синтаксис arbre и сформулировать разделы панели мониторинга следующим образом:

section "Common",:priority => 1 do 
  div do     
    if current_admin_user.role == "customer"
      li "You are a customer"
    end
  end
  '' 
end
1 голос
/ 05 августа 2012

Вы можете получить доступ к действию контроллера 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
1 голос
/ 18 апреля 2012

Также вы можете ограничить разделы панели мониторинга с помощью: если условия, поэтому панель будет доступна для всех пользователей, но только с разрешенными разделами

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