我正在使用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
答案 0 :(得分:0)
为您的用户模型添加after_create
挂钩。
after_create :setup_permissions
def setup_permissions
#Do what you need to do here
end
答案 1 :(得分:0)
我通过在Model.where()的末尾添加.to_a将其转换为数组来实现它。在Model.find(id)的情况下,当您使用Model.where()子句而不是Array时,Rails返回ActiveRecord :: Relationship。这应该得到纠正,并在两种情况下都相似。
before_create :setup_permissions
def setup_permissions
permissions = []
@roles = Role.where('subject_id is null and permissions = ?', 'Read').to_a
@roles.each do |role|
permissions << {:role_id => role.id}
end
end