如何限制Active Admin中的可管理实体?

时间:2014-05-28 11:12:38

标签: activeadmin

我想基于current_user和模型实体的属性来限制Active Admin中可管理模型实体的列表。

例如:用户(具有管理员权限)具有team_id == 2且应该只能管理 team_id == 2

的任务

编辑:我试图使用范围,但我不知道如何使用这个条件:

user.team_id == task.team_id

Active Admin可以吗?

感谢您的时间。(这是我的第一篇文章,请告诉我是否可以改进我的问题)

2 个答案:

答案 0 :(得分:0)

您最有可能尝试定义不同级别的访问和授权。您应该查看CanCan gem:https://github.com/ryanb/cancan

ActiveAdmin解释了如何在此处实施它:http://www.activeadmin.info/docs/13-authorization-adapter.html#using_the_cancan_adapter

然后在你的情况下你可以定义一个ability.rb,如:

class Ability
    include CanCan::Ability

    def initialize(user)
        user ||= User.new
        case user.team_id
            when 1
                can :manage, Post
            when 2
                can :manage, Post
                can :manage, Task
            when 3
                can :manage, :all
        end
        can :read, ActiveAdmin::Page, :name => "Dashboard"
    end
end

我建议定义一个role属性,而不是使用team_id,但这只是用语义挑剔:)

希望它有所帮助!

答案 1 :(得分:0)

我终于找到了如何使用范围:

scope_to :current_user

并添加到用户模型:

has_many :tasks, through: :team