【问题标题】:Assign default permissions at time of user creation在创建用户时分配默认权限
【发布时间】:2012-11-27 23:30:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    after_create 挂钩添加到您的用户模型。

    after_create :setup_permissions
    
    def setup_permissions
      #Do what you need to do here
    end
    

    【讨论】:

    • 它正在工作,但我收到此错误:NoMethodError in Devise::RegistrationsController#create undefined method `target' for #<:relation:0x1516ac10>
    • 您可以编辑您的问题以包含相关的堆栈跟踪吗?我不知道你的简短描述。
    【解决方案2】:

    我通过在 Model.where() 末尾添加 .to_a 将其转换为数组来使其工作。当您使用 Model.where() 子句而不是在 Model.find(id) 的情况下使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-05
      • 2012-01-22
      • 2014-01-26
      • 2021-12-19
      • 1970-01-01
      • 2022-01-18
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多