diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3a25598..c7d8c60 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -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 diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb index 34a4a45..155c3cf 100644 --- a/app/views/users/_form.html.erb +++ b/app/views/users/_form.html.erb @@ -1,30 +1,68 @@ <%= form_with(model: user, local: true, html: { class: 'needs-validation', novalidate: true }) do |form| %> - + + <%# Display validation errors, if any %> <% if user.errors.any? %> - + <%# Error messages display block %> <% end %> - + <%# User attributes fields %> + <%# Email field %>
<%= form.label :email, class: 'form-label' %> <%= form.email_field :email, id: :user_email, class: 'form-control' %>
- + <%# First Name %>
- <%= 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' %>
- -
- <%= form.submit 'Save', class: 'btn btn-dark' %> + <%# Last Name %> +
+ <%= form.label :last_name, class: 'form-label' %> + <%= form.text_field :last_name, id: :user_last_name, class: 'form-control' %>
+ + <%# Phone Number %> +
+ <%= form.label :phone, class: 'form-label' %> + <%= form.telephone_field :phone, id: :user_phone, class: 'form-control' %> +
+ + <%# Company %> +
+ <%= form.label :company, class: 'form-label' %> + <%= form.text_field :company, id: :user_company, class: 'form-control' %> +
+ + <%# Assuming roles are assigned via checkboxes or a select dropdown %> +
+ <%= 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' } %> +
+ + <%# Access control fields %> +
+ <%= form.check_box :access_revoked, class: 'form-check-input' %> + <%= form.label :access_revoked, 'Access Revoked', class: 'form-check-label' %> +
+ + <%# Date fields for access control %> +
+ <%= form.label :access_start_date, 'Access Start Date', class: 'form-label' %> + <%= form.date_select :access_start_date, class: 'form-control' %> +
+ +
+ <%= form.label :access_end_date, 'Access End Date', class: 'form-label' %> + <%= form.date_select :access_end_date, class: 'form-control' %> +
+ + <%# Submit button %> +
+ <%= form.submit 'Save', class: 'btn btn-primary' %> +
+ <% end %> diff --git a/db/migrate/20240409215110_add_details_to_users.rb b/db/migrate/20240409215110_add_details_to_users.rb new file mode 100644 index 0000000..476b576 --- /dev/null +++ b/db/migrate/20240409215110_add_details_to_users.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 9e1803d..4ac86c5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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