Ruby on rails ActiveAdmin-自定义显示的记录

Ruby on rails ActiveAdmin-自定义显示的记录,ruby-on-rails,activerecord,ruby-on-rails-3.1,activeadmin,Ruby On Rails,Activerecord,Ruby On Rails 3.1,Activeadmin,因此,我有一个应用程序,用户(Desive)可以看到所有或主要模型的子集(在本例中是学校),这取决于用户是在分支机构、地区还是国家级别 Branch belongs_to Region School belongs_to Branch 我想做的是能够以对ActiveAdmin透明的方式连接权限(可能有一个作用域)。用户登录到ActiveAdmin,并显示一个仅允许他们查看的学校列表 所以我想这可能是一个ActiveAdmin解决方案,或者是一个较低级别的解决方案 任何想法都是非常受欢迎的:)您

因此,我有一个应用程序,用户(Desive)可以看到所有或主要模型的子集(在本例中是学校),这取决于用户是在分支机构、地区还是国家级别

Branch belongs_to Region
School belongs_to Branch
我想做的是能够以对ActiveAdmin透明的方式连接权限(可能有一个作用域)。用户登录到ActiveAdmin,并显示一个仅允许他们查看的学校列表

所以我想这可能是一个ActiveAdmin解决方案,或者是一个较低级别的解决方案


任何想法都是非常受欢迎的:)

您可以将其设置为用户可以访问学校、分支机构或地区。如果此关联为零,则表示用户可以访问所有内容(您提到的国家级别)

这基本上意味着每次Active Admin加载一所学校(或索引页上的学校列表)时,它都会通过我们在
scope\u to
块中创建的匿名类来确定其范围

您应该能够根据您的需求在
分支机构
地区
模型上实现类似的功能

不过,您应该知道,当前在使用
scope\u to
时,对于显示当前用户范围外资源的筛选器和表单,存在一些问题

您还需要授权来限制特定级别的用户仅查看该级别及其以下级别(例如,分支级别的用户不应访问区域)。为此,您应该使用


有关如何在Active Admin中集成CanCan的信息,请参阅或。

您可以设置它,以便用户可以访问学校、分支机构或地区。如果此关联为零,则表示用户可以访问所有内容(您提到的国家级别)

这基本上意味着每次Active Admin加载一所学校(或索引页上的学校列表)时,它都会通过我们在
scope\u to
块中创建的匿名类来确定其范围

您应该能够根据您的需求在
分支机构
地区
模型上实现类似的功能

不过,您应该知道,当前在使用
scope\u to
时,对于显示当前用户范围外资源的筛选器和表单,存在一些问题

您还需要授权来限制特定级别的用户仅查看该级别及其以下级别(例如,分支级别的用户不应访问区域)。为此,您应该使用


有关如何在Active Admin中集成CanCan的信息,请参阅或。

我对管理框架的经验是,它们不适合普通站点用户。然而,我没有使用ActiveAdmin的经验,所以我不能对此发表评论。不过它看起来很不错,我会在我的下一个项目中试一试。它看起来确实很酷,不是吗?我已经有了RailsAdmin,只是为了让我开始工作和运行,但我打算退休,从头开始运行我自己的管理员-只是想弄清楚ActiveAdmin是否足够灵活,可以成为一个很好的基础。明白了;-)让我们知道你发现了什么我在管理框架方面的经验是,它们不适合普通的站点用户。然而,我没有使用ActiveAdmin的经验,所以我不能对此发表评论。不过它看起来很不错,我会在我的下一个项目中试一试。它看起来确实很酷,不是吗?我已经有了RailsAdmin,只是为了让我开始工作和运行,但我打算退休,从头开始运行我自己的管理员-只是想弄清楚ActiveAdmin是否足够灵活,可以成为一个很好的基础。明白了;-)让我们知道你发现了什么一个精彩的答案,涵盖了我需要知道的一切,谢谢托马斯。希望我能变得足够优秀,在不远的将来回馈StackOverflow。多么精彩的回答,涵盖了我需要知道的一切,谢谢Thomas。希望我能变得足够好,在不久的将来回馈StackOverflow。
class User < ActiveRecord::Base
  belongs_to :administrates, :polymorphic => true
end

class School < ActiveRecord::Base
  belongs_to :branch
  has_many :users, :as => :administrates
end

class Branch < ActiveRecord::Base
  belongs_to :region
  has_many :schools
  has_many :users, :as => :administrates
end

class Region < ActiveRecord::Base
  has_many :branches
  has_many :users, :as => :administrates
end
ActiveAdmin.register School do
  scope_to do
    Class.new do
      def self.schools
        case current_user.administrates
        when School
          School.where(:id => current_user.administrates_id)
        when Branch
          School.where(:branch_id => current_user.administrates_id)
        when Region
          School.where(:branch_id => current_user.administrates.branches.map(&:id))
        when NilClass
          School.scoped
        end
      end
    end
  end
end