正在开发一个需要管理员和普通用户的系统,我正在尝试使用设计,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
答案 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