Ruby on rails Rails 4:为多角色定制Desive 3.1.0
我在使用Desive时遇到问题。这不是一个真正的问题,而是一个“我不知道怎么做” 实际上,我正在Rails 4应用程序上使用Desive 3.1.0。到目前为止,我只有我的Ruby on rails Rails 4:为多角色定制Desive 3.1.0,ruby-on-rails,devise,customization,Ruby On Rails,Devise,Customization,我在使用Desive时遇到问题。这不是一个真正的问题,而是一个“我不知道怎么做” 实际上,我正在Rails 4应用程序上使用Desive 3.1.0。到目前为止,我只有我的注册,用户可以通过注册进入系统 问题是,现在,我正在为每个用户添加组和角色,因为每个用户都属于一个特定的组(公司本身)。所以在这种情况下,当用户第一次注册时,他注册为管理员并创建他的公司。但是假设在这个应用程序的内部,这个管理员想要创建其他用户,这些用户都属于那个SEPCFIC公司 我知道我可以覆盖design::Regist
注册
,用户可以通过注册进入系统
问题是,现在,我正在为每个用户添加组和角色,因为每个用户都属于一个特定的组(公司本身)。所以在这种情况下,当用户第一次注册时,他注册为管理员并创建他的公司。但是假设在这个应用程序的内部,这个管理员想要创建其他用户,这些用户都属于那个SEPCFIC公司
我知道我可以覆盖design::RegistrationController
,但是看着他们原来的update
方法,我觉得如果我复制他们的代码并修改我的代码以使其正常工作,代码就会膨胀
我特别关心的是强参数
。让我解释一下,实际上我覆盖了designe::RegistrationsController
上的account\u update\u参数,因为它:
protected
def account_update_params
params.require(:user).permit(:lastname, :firstname, :email, :current_password, :password, :password_confirmation)
end
但是,如果我想从应用程序中添加帐户作为管理员,我还需要允许:role
,这可能是注册表表单中的安全问题。如果有人试图在注册时向角色中注入一些东西会怎么样
如何以最佳方式仅允许在应用程序内部使用:角色,而不允许在注销时使用
谢谢大家是的,我也讨厌覆盖Desive控制器。Desive的部分问题在于它可能有点僵化和不可固化
在routes.rb文件中,创建新路由
get '/users/sign_up_as/:role' => 'devise/registrations/#new', :as => 'new_user_registration'
然后使用该行修改“设计注册”视图
<%= f.hidden_field :role, :value => params[:role] %>
此外,请记住,您无需为表格本身使用设计注册控制器。如果您运行User.create
,Desive仍将发送确认电子邮件等。以下是我的操作方法
假设:
1.当用户注册时,他是新公司的管理员
2.用户可以由管理员在应用程序中创建,也可以由您应用的其他逻辑创建
首先,在app/models/User.rb中为用户模型创建一个after_create
class User < ActiveRecord::Base
after_create :set_account_and_admin
protected
def set_account_and_admin
if self.account_id.nil?
@account = Account.create!
self.update(account_id: @account.id, admin: true)
end
end
现在,当有人进入你的注册应用程序并输入用户/密码时,他们将获得一个新帐户,用户模型将为你创建一个新帐户,并将该新用户设置为管理员
如果该用户登录,他们可以创建新用户,则Desive将看到该用户已登录,并将新用户分配到当前用户帐户
现在,您可以为管理员/组以及可以创建新用户的用户添加任何逻辑,而不必担心将逻辑添加到表单中
另一种替代方法是在控制器中执行单独的操作,如“inappcreate”,并转到用户表单中的操作。谢谢您的帮助。我不知道使用User.create
仍然可以使身份验证引擎工作。知道这一点解决了我的问题。谢谢:)酷,是的,我花了好几天的开发时间在Desive上,试图克服这样的问题。Desive非常棒,但很难定制。
class User < ActiveRecord::Base
after_create :set_account_and_admin
protected
def set_account_and_admin
if self.account_id.nil?
@account = Account.create!
self.update(account_id: @account.id, admin: true)
end
end
def create
build_resource(sign_up_params)
if current_user
resource.account_id = current_user.account_id
end
#...rest of devise stuff taken from the gem
end