Как назначить роль пользователю в Контроллере регистрации и его просмотре с помощью Rolify и Devise
Я хочу, чтобы радиобутгруппа выбрала роль на мой взгляд, но я не знаю, как с этим справиться. Я уже настроил гемы rolify и devise, но я не уверен, как назначать роли в представлении и контроллере. Я уже создал роли в консоли. Я хочу убедиться, что нет никаких подвигов при выборе роли. Например, если человек пытается изменить имя роли из браузера и назначить его себе (например, администратору), это будет большой проблемой.
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
def create
super
end
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:firstname, :lastname, :email, :terms_of_service])
end
user.rb
class User < ApplicationRecord
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :lockable, :timeoutable
validates :terms_of_service, :allow_nil => false, :acceptance => true
end
часть представления для регистрации
<%= form_for(resource, as: resource_name, :role => "form", url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="form-group">
<%= f.label t('label.user.form_content.firstname') %><br/>
<%= f.text_field :firstname, autofocus: true, :class => "form-control text-center" %>
</div>
<div class="form-group">
<%= f.label t('label.user.form_content.lastname') %><br/>
<%= f.text_field :lastname, :class => "form-control text-center" %>
</div>
<div class="form-group">
<%= f.label t('label.user.form_content.email') %><br/>
<%= f.email_field :email, :class => "form-control text-center" %>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<%= f.label t('label.user.form_content.password') %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br/>
<%= f.password_field :password, autocomplete: "off", :class => "form-control text-center" %>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<%= f.label t('label.user.form_content.password_confirmation') %>
<% if @minimum_password_length %>
<em>(Must be same with password)</em><br/>
<% end %><br/>
<%= f.password_field :password_confirmation, autocomplete: "off", :class => "form-control text-center" %>
</div>
</div>
</div>
<% end %>
1 ответ
У меня была похожая проблема, когда я пытался управлять сложной функциональностью с помощью rolify, у меня есть довольно хорошее решение для проверки ролей внутри модели User, я оставлю ссылку на случай, если вы захотите проверить ее.
Rolify: проверка ролей со сложной функциональностью внутри модели User
Кроме того, я добавляю роли после регистрации пользователя в registrations_controller, я оставлю еще одну ссылку, показывающую, как это сделать:
Динамическое добавление ролей через форму USING Rolify вместе с Devise и Cancan
Надеюсь это поможет!