91 lines
1.9 KiB
Ruby
91 lines
1.9 KiB
Ruby
class Admin::UsersController < Admin::ApplicationController
|
|
before_action :set_user, only: [:edit, :update]
|
|
|
|
def index
|
|
@users = filtered_users.order("email")
|
|
end
|
|
|
|
def new
|
|
@user = build_user
|
|
@accounts = accounts
|
|
end
|
|
|
|
def create
|
|
auth_params = user_create_params.slice(:account_id, :role)
|
|
|
|
@user = authorize sign_up(user_create_params.except(:account_id, :role))
|
|
|
|
if @user.valid?
|
|
account = accounts.find(auth_params[:account_id])
|
|
@user.account_auths << AccountAuth.create(user: @user, account: account, role: auth_params[:role])
|
|
UserMailer.welcome(@user, account).deliver_later
|
|
redirect_to admin_users_path, notice: t(".notice")
|
|
else
|
|
@accounts = accounts
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@accounts = accounts
|
|
end
|
|
|
|
def update
|
|
set_user_password
|
|
|
|
if @user.update(user_update_params.except(:password))
|
|
redirect_to admin_users_path, notice: t(".notice")
|
|
else
|
|
@accounts = accounts
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@user = authorize User.find(params[:id])
|
|
@user.destroy
|
|
|
|
redirect_to admin_users_path, alert: t(".alert")
|
|
end
|
|
|
|
private
|
|
|
|
def set_user
|
|
@user = find_user
|
|
end
|
|
|
|
def accounts
|
|
policy_scope Account
|
|
end
|
|
|
|
def users
|
|
policy_scope User
|
|
end
|
|
|
|
def find_user
|
|
authorize users.find(params[:id])
|
|
end
|
|
|
|
def build_user(params = {})
|
|
authorize users.new(params)
|
|
end
|
|
|
|
def user_create_params
|
|
params.require(:user).permit(:email, :password, :admin, :account_id, :role)
|
|
end
|
|
|
|
def user_update_params
|
|
params.require(:user).permit(:email, :admin, :password)
|
|
end
|
|
|
|
def set_user_password
|
|
if user_update_params[:password].present?
|
|
Oath::Services::PasswordReset.new(@user, user_update_params[:password]).perform
|
|
end
|
|
end
|
|
|
|
def filtered_users
|
|
params[:query].present? ? users.search(params[:query]) : users
|
|
end
|
|
end
|