我正在使用 devise 和 cancan 进行用户身份验证和权限。我只需要为任何新用户创建一组默认权限。我不想弄乱设计代码,所以它应该在我的用户模型中。最好的方法是什么。
好的,这是我在模型中尝试的:
before_create :setup_permissions
def setup_permissions
permissions = []
@roles = Role.where('subject_id is null and permissions = ?', 'Read')
@roles.each do |role|
permissions << {:role_id => role.id}
end
self.role_assignments_attributes = permissions
end
但是上面的代码给出了一个错误。
有趣的是,我在控制台中逐行运行代码以从上面构建权限。它产生正确的数组,如下所示。
permissions = [{:role_id=>15}, {:role_id=>17}, {:role_id=>19}, {:role_id=>21}, {:role_id=>23}, {:role_id=>25}, {:role_id=>27}]
当我将权限数组直接粘贴到模型中而不是构建它时,它可以工作,如下所示:
def setup_permissions
permissions = [{:role_id=>15}, {:role_id=>17}, {:role_id=>19}, {:role_id=>21}, {:role_id=>23}, {:role_id=>25}, {:role_id=>27}]
@roles = Role.where('subject_id is null and permissions = ?', 'Read')
@roles.each do |role|
permissions << {:role_id => role.id}
end
self.role_assignments_attributes = permissions
end