область действия с активным администратором cancan

Как я могу использовать область действия с активным администратором и канканом. У меня есть пользователи-администраторы, и те, которые имеют (has_one) отношение к учреждению, и учреждение имеет много профилей. Теперь, когда пользователь-администратор входит в систему, я хочу отображать все профили, которые имеют одно и то же учреждение.

Не находит следующую ссылку очень полезной.

http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries


person chaitanya    schedule 30.05.2012    source источник


Ответы (1)


если вы просто сделаете это, у вас возникнут проблемы?

# ability.db

def initialize(user)
  case
    # ...
    when user.super_admin?
      can :manage, :all
    when user.admin?
      can :manage, Profile, :institution_id => user.institution.id
    # 
    # ...
end

это позволит: Profile.accessible_by(current_user), что здесь совпадает с current_user.profiles

class AdminUser
  has_one :institution
  has_many :profiles, :through => :institution
end

ActiveAdmin.register Profile do
  scope_to :current_user #here comes the variable which set in initializer
end

если вы хотите, чтобы суперадмин имел доступ ко всем сообщениям, вы можете использовать опцию :association_method

ActiveAdmin.register Profile do
  scope_to :current_user, :association_method => :admin_profiles
end 

# in class User
def admin_profiles
  if super_admin?
    Profile.unscoped
  else
    profiles
  end
end

Хитрое решение может обобщить это и использовать класс делегатора в качестве прокси, чтобы отменить все модели для суперадминистраторов. могу расписать по запросу.

person Viktor Trón    schedule 30.05.2012
comment
поэтому необходимо создать виртуальные отношения между пользователем-администратором и профилями через учреждение. Большое спасибо !! ваш ответ многое проясняет об активном администраторе и канкане - person chaitanya; 30.05.2012
comment
как я могу отменить это, если пользователь super_admin? для например. он должен видеть все профили? - person chaitanya; 06.06.2012
comment
Привет @viktor tron, может быть, вы могли бы помочь мне с этим stackoverflow.com/questions/11096400/ - person chaitanya; 19.06.2012