Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:Desive和milia上第一个注册用户的默认管理员_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails Rails:Desive和milia上第一个注册用户的默认管理员

Ruby on rails Rails:Desive和milia上第一个注册用户的默认管理员,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我正在为一个使用RubyonRails、Desive、Stripe和Stripe的多租户应用程序工作 基本概念:首先,用户通过使用Desive sign\u page等程序性方式创建帐户,然后创建一个组织。此时,该用户可以为该组织添加多个成员。第一个用户是组织管理员,其他成员只是成员,没有写入权限只是阅读许可 第二步,第一个用户向将拥有组织成员的成员发送邀请,现在一切都在运行,如注册、付款和向成员发送电子邮件并加入此成员 我试过这样做 在user.rb上 before_save {self.is

我正在为一个使用RubyonRails、Desive、Stripe和Stripe的多租户应用程序工作

基本概念:首先,用户通过使用Desive sign\u page等程序性方式创建帐户,然后创建一个组织。此时,该用户可以为该组织添加多个成员。第一个用户是组织管理员,其他成员只是成员,没有写入权限只是阅读许可

第二步,第一个用户向将拥有组织成员的成员发送邀请,现在一切都在运行,如注册、付款和向成员发送电子邮件并加入此成员

我试过这样做

user.rb上

before_save {self.is_admin = true}
但这对包括成员在内的所有人来说都是一种节约

这是我的注册码

class RegistrationsController < Milia::RegistrationsController

    skip_before_action :authenticate_tenant!, :only => [:new, :create, :cancel]

    def create
        # have a working copy of the params in case Tenant callbacks
        # make any changes
        tenant_params = sign_up_params_tenant
        user_params   = sign_up_params_user
        coupon_params = sign_up_params_coupon

        sign_out_session!
        # next two lines prep signup view parameters
        prep_signup_view( tenant_params, user_params, coupon_params )

        # validate recaptcha first unless not enabled
        if !::Milia.use_recaptcha  ||  verify_recaptcha
            Tenant.transaction  do
                @tenant = Tenant.create_new_tenant( tenant_params, user_params, coupon_params)
                if @tenant.errors.empty?   # tenant created
                    if @tenant.plan == 'premium'
                        @payment = Payment.new({email: user_params["email"],
                            token: params[:payment]["token"],
                            tenant: @tenant
                        })

                        flash[:error] = "Please check registration errors" unless @payment.valid?

                        begin 
                            @payment.process_payment
                            @payment.save
                        rescue Exception => e
                            flash[:error] = e.message
                            @tenant.destroy
                            log_action('Payment Failed') 
                            render :new and return
                        end
                    end
                else
                    resource.valid?
                    log_action( "tenant create failed", @tenant )
                    render :new
                end # if .. then .. else no tenant errors

                if flash[:error].blank? || flash[:error].empty?
                    initiate_tenant( @tenant )    # first time stuff for new tenant
                    devise_create( user_params )   # devise resource(user) creation; sets resource
                    if resource.errors.empty?   #  SUCCESS!
                        log_action( "signup user/tenant success", resource )
                        # do any needed tenant initial setup
                        Tenant.tenant_signup(resource, @tenant, coupon_params)
                    else  # user creation failed; force tenant rollback
                        log_action( "signup user create failed", resource )
                        raise ActiveRecord::Rollback   # force the tenant transaction to be rolled back
                    end  # if..then..else for valid user creation
                else
                    resource.valid?
                    log_action('Payment proccesing fails', @tenant)
                    render :new and return
                end # if. . then .. else no tenant errors
            end  #  wrap tenant/user creation in a transaction
        else
            flash[:error] = "Recaptcha codes didn't match; please try again"
           # all validation errors are passed when the sign_up form is re-rendered
            resource.valid?
            @tenant.valid?
            log_action( "recaptcha failed", resource )
            render :new
        end
    end   # def create
end
类注册控制器[:新建,:创建,:取消]
def创建
#备有参数的工作副本,以防租户回调
#有什么变化吗
租户参数=注册租户参数
用户参数=注册用户参数
优惠券参数=注册优惠券参数
注销会话!
#接下来的两行准备注册视图参数
准备注册视图(租户参数、用户参数、优惠券参数)
#除非未启用,否则首先验证recaptcha
如果!::Milia.使用| | |验证|
承租人。交易做什么
@租户=租户。创建新租户(租户参数、用户参数、优惠券参数)
如果@tenant.errors.empty?#租户创建
如果@tenant.plan=='premium'
@payment=payment.new({email:user_params[“email”],
令牌:参数[:付款][“令牌”],
租户:@租户
})
flash[:error]=“请检查注册错误”,除非@payment.valid?
开始
@付款。处理付款
@付款,储蓄
救援异常=>e
闪光[:错误]=e.message
@承租人,销毁
记录操作(“付款失败”)
渲染:新建并返回
结束
结束
其他的
资源。有效吗?
日志_操作(“租户创建失败”,@tenant)
渲染:新
结束#如果。。然后。。否则没有租户错误
如果闪烁[:错误]。空白?| |flash[:错误]。是否为空?
启动_租户(@tenant)#新租户的第一次资料
设计创建(用户参数)#设计资源(用户)创建;集合资源
如果resource.errors.empty?#成功!
日志操作(“注册用户/租户成功”,资源)
#进行任何需要的租户初始设置
租户.租户注册(资源,@Tenant,优惠券参数)
否则#用户创建失败;强制租户回滚
日志操作(“注册用户创建失败”,资源)
raise ActiveRecord::Rollback#强制回滚租户事务
结束#if..then..else用于有效用户创建
其他的
资源。有效吗?
日志操作('支付过程失败',@tenant)
渲染:新建并返回
结束#如果。然后。。否则没有租户错误
结束#在事务中包装租户/用户创建
其他的
flash[:error]=“Recaptcha代码不匹配;请重试”
#重新呈现注册表单时,将传递所有验证错误
资源。有效吗?
@租客,有效吗?
记录操作(“recaptcha失败”,资源)
渲染:新
结束
结束#定义创建
结束
我的问题是:如何为创建组织的人创建
is_admin:true


谢谢

如果我理解了您的概念,您需要为谁可以使用此注册控制器注册分配
is_admin:true
,对吗?如果是,则很容易更新此
user\u params=sign\u params\u user
代码行

试试下面的方法

user_params   = sign_up_params_user.merge({ is_admin: true })
现在,仅为可以在组织中创建帐户的人员分配
is_admin:true

现在,如果您为普通成员设置了特殊权限,那么创建一个方法来
user.rb
类似的文件

def is_admin?
  is_admin
end
然后申请许可

if current_user.is_admin?
   #=> Permission for admin
else
   #=> Permission denied for normal members
end

希望它有帮助

如果使用类似于
rolifygem
的东西,您可以添加行

@user.add_role(:admin)
在注册\u controller.rb`中的以下上下文中:

Tenant.transaction  do
  @tenant = Tenant.create_new_tenant( tenant_params, user_params, coupon_params)
  if @tenant.errors.empty?   # tenant created

    initiate_tenant( @tenant )    # first time stuff for new tenant

    devise_create( user_params )   # devise resource(user) creation; sets resource

    @user.add_role(:admin)

哇!很简单,谢谢