【发布时间】:2013-07-07 10:40:17
【问题描述】:
我的项目中有一个用户模型和许多其他模型,以创建一个我实现角色和权限的 RBAC 系统。用户has_and_belongs_to_many 角色和角色has_and_belongs_to_many 权限。
class Permission
include Mongoid::Document
field :ability, type: String
has_and_belongs_to_many :roles
belongs_to :permission_for, polymorphic: true, dependent: :destroy
index({ability: 1,permission_for_id: 1},unique: true)
end
class Role
include Mongoid::Document
field :name, type: String
has_and_belongs_to_many :permissions
has_and_belongs_to_many :users
belongs_to :role_for, polymorphic: true
index({name: 1,role_for_id: 1},unique: true)
end
在用户模型中我有:
Class User
include Mongoid::Document
.
.
.
def able?(scope,model,action)
# There must be something to load and check permissions
end
end
在作用域 (role_for) 中定义的角色和在角色作用域中的模型中定义的权限(项目是作用域,任务是该作用域中的模型)permission_for。
在用户模型中,我需要从数据库中获取数据并检查用户是否能够执行该操作,在大量数据中需要太长时间。 able? 我实现的函数很简单,就是加载每个用户的角色和每个角色的权限,然后检查权限的能力是否等于动作,然后返回true或false!
是否有任何 gem 或代码可以做类似的事情?如果没有,您能否告诉我如何以这种方式实现角色和权限,同时减少数据库负载?
很多东西
编辑 1
好的,我已经创建了这个关系并设法在我的模型中使用它,正常使用的性能还可以,但是当我想要获取大量数据时,它非常慢。我需要在作用域模型中缓存角色和权限,我该怎么做?是否有任何 Rails 插件可以为我做到这一点?
【问题讨论】:
标签: ruby-on-rails-3 caching rbac role-based russian-doll-caching