Working on the User model. Have the new desired fields for users and need to still stylize Edit page, link the right form page and continue with access revoking.

This commit is contained in:
Ben 2024-04-09 17:48:54 -05:00
parent 867deebf20
commit cbbe45c791
4 changed files with 80 additions and 27 deletions

View File

@ -43,8 +43,9 @@ class UsersController < ApplicationController
end
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, roles: [])
params.require(:user).permit(:email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :phone, :company, :access_revoked, :access_start_date, :access_end_date, roles: [])
end
def require_admin
unless current_user.admin?
@ -53,16 +54,12 @@ class UsersController < ApplicationController
end
def assign_roles(user)
user.roles.delete_all # Clear all roles before reassigning to prevent duplicates
# Assuming roles are passed as an array of role names from the form
# and that the form sends an empty string if no roles are selected.
selected_roles = params[:user][:roles].reject(&:blank?)
selected_roles.each do |role_name|
user.add_role(role_name) unless user.has_role?(role_name)
end
user.roles = []
params[:user][:roles].each do |role_name|
user.add_role(role_name) unless role_name.blank?
end if params[:user][:roles].present?
end
def update_user_roles(user, roles_names)
user.roles.delete_all # Remove existing roles

View File

@ -1,30 +1,68 @@
<%= form_with(model: user, local: true, html: { class: 'needs-validation', novalidate: true }) do |form| %>
<!-- Display errors, if any -->
<%# Display validation errors, if any %>
<% if user.errors.any? %>
<div id="error_explanation" class="alert alert-danger" role="alert">
<h4><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h4>
<ul>
<% user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<%# Error messages display block %>
<% end %>
<!-- Email field -->
<%# User attributes fields %>
<%# Email field %>
<div class="mb-3">
<%= form.label :email, class: 'form-label' %>
<%= form.email_field :email, id: :user_email, class: 'form-control' %>
</div>
<!-- Role selection -->
<%# First Name %>
<div class="mb-3">
<%= form.label :roles, 'Assign Role', class: 'form-label' %>
<%= form.select :roles, options_for_select(Role.pluck(:name), user.roles.pluck(:name)), {}, { multiple: true, class: 'form-control' } %>
<%= form.label :first_name, class: 'form-label' %>
<%= form.text_field :first_name, id: :user_first_name, class: 'form-control' %>
</div>
<!-- Submit button -->
<div class="actions">
<%= form.submit 'Save', class: 'btn btn-dark' %>
<%# Last Name %>
<div class="mb-3">
<%= form.label :last_name, class: 'form-label' %>
<%= form.text_field :last_name, id: :user_last_name, class: 'form-control' %>
</div>
<%# Phone Number %>
<div class="mb-3">
<%= form.label :phone, class: 'form-label' %>
<%= form.telephone_field :phone, id: :user_phone, class: 'form-control' %>
</div>
<%# Company %>
<div class="mb-3">
<%= form.label :company, class: 'form-label' %>
<%= form.text_field :company, id: :user_company, class: 'form-control' %>
</div>
<%# Assuming roles are assigned via checkboxes or a select dropdown %>
<div class="mb-3">
<%= form.label :roles, 'Assign Role(s)', class: 'form-label' %>
<%# Adjust this to your roles setup %>
<%= form.collection_select :roles, Role.all, :name, :name, {}, { multiple: true, class: 'form-select' } %>
</div>
<%# Access control fields %>
<div class="mb-3">
<%= form.check_box :access_revoked, class: 'form-check-input' %>
<%= form.label :access_revoked, 'Access Revoked', class: 'form-check-label' %>
</div>
<%# Date fields for access control %>
<div class="mb-3">
<%= form.label :access_start_date, 'Access Start Date', class: 'form-label' %>
<%= form.date_select :access_start_date, class: 'form-control' %>
</div>
<div class="mb-3">
<%= form.label :access_end_date, 'Access End Date', class: 'form-label' %>
<%= form.date_select :access_end_date, class: 'form-control' %>
</div>
<%# Submit button %>
<div class="actions">
<%= form.submit 'Save', class: 'btn btn-primary' %>
</div>
<% end %>

View File

@ -0,0 +1,11 @@
class AddDetailsToUsers < ActiveRecord::Migration[7.1]
def change
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :phone, :string
add_column :users, :company, :string
add_column :users, :access_revoked, :boolean, default: false
add_column :users, :access_start_date, :date
add_column :users, :access_end_date, :date
end
end

9
db/schema.rb generated
View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2024_04_03_213530) do
ActiveRecord::Schema[7.1].define(version: 2024_04_09_215110) do
create_table "bank_accounts", force: :cascade do |t|
t.string "institution_name"
t.string "account_type"
@ -180,6 +180,13 @@ ActiveRecord::Schema[7.1].define(version: 2024_04_03_213530) do
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "admin", default: false, null: false
t.string "first_name"
t.string "last_name"
t.string "phone"
t.string "company"
t.boolean "access_revoked", default: false
t.date "access_start_date"
t.date "access_end_date"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end