我的项目中有一个用户模型和许多其他模型,以创建一个我实现角色和权限的 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!
是否有任何宝石或代码可以做类似的事情?如果没有,你能给我建议如何以这种方式实现角色和权限,而数据库负载要少得多吗?
许多许多tahnk
编辑 1
好的,我已经创建了这个关系并设法在我的模型中使用它,正常使用的性能还可以,但是当我想要获取大量数据时,它非常慢。我需要在作用域模型中缓存角色和权限,我该怎么做?是否有任何 Rails 插件可以为我做到这一点?