add cancan for authorization
This commit is contained in:
@@ -1,26 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UsersController < ApplicationController
|
||||
before_action :load_user, only: %i[edit update destroy]
|
||||
load_and_authorize_resource :user, only: %i[index edit new update destroy]
|
||||
|
||||
before_action :build_user, only: :create
|
||||
authorize_resource :user, only: :create
|
||||
|
||||
def index
|
||||
@pagy, @users = pagy(current_account.users.active.order(id: :desc))
|
||||
@pagy, @users = pagy(@users.active.order(id: :desc))
|
||||
end
|
||||
|
||||
def new
|
||||
@user = current_account.users.new
|
||||
end
|
||||
def new; end
|
||||
|
||||
def edit; end
|
||||
|
||||
def create
|
||||
@user = current_account.users.find_by(email: user_params[:email])&.tap do |user|
|
||||
user.assign_attributes(user_params)
|
||||
user.deleted_at = nil
|
||||
end
|
||||
|
||||
@user ||= current_account.users.new(user_params)
|
||||
|
||||
if @user.save
|
||||
UserMailer.invitation_email(@user).deliver_later!
|
||||
|
||||
@@ -33,7 +27,7 @@ class UsersController < ApplicationController
|
||||
def update
|
||||
return redirect_to settings_users_path, notice: 'Unable to update user.' if Docuseal.demo?
|
||||
|
||||
if @user.update(user_params.compact_blank)
|
||||
if @user.update(user_params.compact_blank.except(current_user == @user ? :role : nil))
|
||||
redirect_to settings_users_path, notice: 'User has been updated'
|
||||
else
|
||||
render turbo_stream: turbo_stream.replace(:modal, template: 'users/edit'), status: :unprocessable_entity
|
||||
@@ -52,11 +46,18 @@ class UsersController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def load_user
|
||||
@user = current_account.users.find(params[:id])
|
||||
def build_user
|
||||
@user = current_account.users.find_by(email: user_params[:email])&.tap do |user|
|
||||
user.assign_attributes(user_params)
|
||||
user.deleted_at = nil
|
||||
end
|
||||
|
||||
@user ||= current_account.users.new(user_params)
|
||||
|
||||
@user
|
||||
end
|
||||
|
||||
def user_params
|
||||
params.require(:user).permit(:email, :first_name, :last_name, :password)
|
||||
params.require(:user).permit(:email, :first_name, :last_name, :password, :role)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user