Files
manyfold/app/controllers/settings/users_controller.rb
T

111 lines
3.3 KiB
Ruby

class Settings::UsersController < ApplicationController
before_action :get_user, except: [:index, :new, :create]
before_action :get_available_roles, only: [:new, :create, :edit, :update]
respond_to :html
def index
@users = policy_scope(User).active.includes([:roles])
@users = apply_sort_order(@users)
@pagy, @users = pagy(:offset, @users)
render layout: "settings"
# i18n-tasks-use t("activerecord.attributes.user.approved")
# i18n-tasks-use t("activerecord.attributes.user.auth_uid")
# i18n-tasks-use t("activerecord.attributes.user.created_at")
# i18n-tasks-use t("activerecord.attributes.user.updated_at")
end
def show
render layout: "settings"
end
def new
authorize(User)
@user = User.new
@user.send :assign_default_role
render layout: "settings"
end
def edit
render layout: "settings"
end
def create
authorize(User)
password = helpers.random_password
# Create user with a random password if one isn't provided
@user = User.create({
"password" => password,
"password_confirmation" => password,
"quota" => SiteSettings.default_user_quota,
"quota_use_site_default" => true
}.merge(user_params))
if @user.valid?
@user.send_reset_password_instructions if SiteSettings.email_configured?
redirect_to [:settings, @user], notice: t(".success")
else
render :new, layout: "settings", status: :unprocessable_content
end
end
def update
if params[:reset]
@user.send_reset_password_instructions
redirect_to [:settings, @user], notice: t(".reset_link_sent")
elsif params[:approve]
@user.update(approved: true)
UserMailer.with(user: @user).account_approved.deliver_later if SiteSettings.email_configured?
redirect_to [:settings, @user], notice: t(".approved")
elsif @user.update(user_params)
redirect_to [:settings, @user], notice: t(".success")
else
render :edit, layout: "settings", status: :unprocessable_content
end
end
def destroy
@user.destroy
redirect_to settings_users_path, notice: t(".success")
end
private
def get_available_roles
@available_roles = policy_scope(Role).all
end
def get_user
@user = policy_scope(User).find_param(params[:id])
authorize @user
end
def user_params
filtered = params.expect(
user: [
:email, # i18n-tasks-use t("activerecord.attributes.user.email")
:username, # i18n-tasks-use t("activerecord.attributes.user.username")
:password, # i18n-tasks-use t("activerecord.attributes.user.password")
:password_confirmation, # i18n-tasks-use t("activerecord.attributes.user.password_confirmation")
:quota, # i18n-tasks-use t("activerecord.attributes.user.quota")
:quota_use_site_default, # i18n-tasks-use t("activerecord.attributes.user.quota_use_site_default")
role_ids: []
]
)
# Filter out admin privilege for anyone but admins
unless current_user&.is_administrator?
filtered[:role_ids]&.delete_if { @available_roles.map(&:id).exclude? it.to_i }
end
filtered
end
def apply_sort_order(scope)
case params[:order]
when "name"
scope.order(username: :asc)
when "recent"
scope.order(created_at: :desc)
else # default to "pending"
scope.order(approved: :asc, created_at: :desc)
end
end
end