1

我正在使用带有acl9的rails3进行授权。我正在尝试了解 ARel 和 rails 的查询方式。

我有一个属于Company的User ,并且该用户对Company具有给定的角色(acl9 提供管道)。如何从给定公司获取具有特定角色的所有用户?我想过滤 DB 中的结果,而不是在应用程序中过滤它们。

我想要这样的东西:

# 
# authorizable_id = 1 is the company's id
# 'collaborator' and '1' would be params for my scope
#
select * from users
inner join roles_users
on roles_users.user_id = users.id
inner join roles
on roles_users.role_id = roles.id
where roles.authorizable_type='Company'
and   roles.authorizable_id = 1
and   roles.name = 'collaborator';

#usage with scope
@collaborators = User.with_role_and_company('collaborator',current_user.company)

我知道 rails3 有一个 sql api,但我来自 Java/Grails 的地方,而且我使用的大多数 ORM 都有一些 ORM api(我想 datamapper 是这样工作的,但我使用的是普通的 rails3)。

4

2 回答 2

1

我发现:

 class << self
   def with_role_in_company(role, company)
      joins(:roles).
          where(:roles => {:authorizable_type => 'Company'}).
          where(:roles => {:authorizable_id => company.id}).
          where(:roles => {:name => role})
    end
  end
于 2010-11-23T00:14:57.063 回答
0

我还在acl9 1.2 中添加了这个功能,所以现在你可以这样做:

company.users :collaborator
于 2015-01-22T21:18:51.853 回答