分配角色以在使用Rolify注册​​时设计用户

时间:2018-06-13 15:52:04

标签: ruby-on-rails rolify

正在开发一个需要管理员和普通用户的系统,我正在尝试使用设计,rolify和cancancan来实现系统。我的问题是我想在第一个注册系统的用户上添加一个管理员角色,但到目前为止,我只能通过rails控制台实现这一点,我也完成了注册控制器的覆盖。以下是我到目前为止所尝试的内容。

User.rb

class User < ApplicationRecord
resourcify
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :invitable, :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

role.rb

class Role < ApplicationRecord

has_and_belongs_to_many :users, :join_table => :users_roles

belongs_to :resource,
       :polymorphic => true,
       :optional => true

validates :resource_type,
      :inclusion => { :in => Rolify.resource_types },
      :allow_nil => true

scopify
end

注册控制器

   class RegistrationsController <   Devise::RegistrationsController

   def create
   super
   @number_of_users = User.all.count
    if @number_of_users == 0
    resource.add_role :admin
  end
  end


  end

2 个答案:

答案 0 :(得分:0)

我能够让它发挥作用,对于那些将来可能面临这样问题的人来说,这是我的解决方案

注册控制器

   after_action :assign_role, only:[:create]
    def assign_role
      @number_of_users = User.all.count
      if @number_of_users == 1 
        current_user.add_role :admin
     end
    end

答案 1 :(得分:0)

我喜欢公认的解决方案,但是为了使事情井井有条,我将其放在用户模型中,如下所示:

after_create :assign_role
def assign_role
  if User.all.count == 1 
    User.first.add_role :admin
  end
end