在创建用户时分配默认权限

时间:2012-11-27 23:30:38

标签: ruby-on-rails ruby-on-rails-3 devise cancan

我正在使用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

2 个答案:

答案 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