我有几个与这个问题相关的模型。
基本上,可以通过UserGroup或直接为用户分配权限。 UserGroups通过UserGroupPermission模型绑定到特定权限。用户通过UserPermission模型绑定到特定权限。
最终结果是能够调用User.permissions并直接或通过UserGroup返回分配给该用户的每个权限。
这是我目前的模特
class User < ActiveRecord::Base
belongs_to :user_group
#Permissions
has_many :user_permissions
has_many :user_group_permissions, :through => :user_group
has_many :permissions, :through => :user_group_permissions #and :user_permissions
end
我已经搜索了高低的解决方案,但似乎找不到我的确切案例。提前谢谢!
编辑:我被告知不清楚我在问什么。希望这会有所帮助:基本上用户has_many:permissions,:through =&gt; :user_group_permissions和:user_permissions,但您不能使用和将结果连接在一起。我正在尝试检索并将这两种关系的结果合并为一个。
编辑2:我一直在做一些工作。这段代码给出了理想的结果,但我不确定它对于潜在的大型数据库有多好。
#Permissions
has_many :user_permissions
has_many :user_group_permissions, :through => :user_group
#has_many :permissions, :through => :user_group_permissions
#has_many :permissions, :through => :user_permissions
def permissions
all_permissions = []
UserGroupPermission.where('user_group_id = ?', user_group_id).each do |ugp|
all_permissions.append(Permission.find(ugp.permission_id))
end
UserPermission.where('user_id = ?', id).each do |p|
all_permissions.append(Permission.find(p.permission_id))
end
return all_permissions
end