Sha256: 2ce9394ef65e66475424e515cf02901bcb3c3e18bd44800c67aaaf7f3da17184

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

module Mks
  module Auth
    class UserRolesController < ApplicationController
      before_action :set_role, only: %i[users]
      before_action :set_user, only: %i[assigned_roles assign_roles]

      # GET /user_roles
      def index
        user_roles = UserRole.joins(:application_module)
                             .where("mks_auth_application_modules.code = '#{app_code}'")
                             .order(:name)
        render json: user_roles
      end

      def users
        render json: @role.users
      end

      def assigned_roles
        selected = @user.roles.map { |ur| { id: ur.id, name: ur.name, selected: true }}
        ids = @user.roles.map(&:id)
        user_roles = UserRole.joins(:application_module)
                             .where("mks_auth_application_modules.code = '#{app_code}'")
                             .where.not('mks_auth_user_roles.id IN (?)', ids)

        not_selected = user_roles.map { |ur| { id: ur.id, name: ur.name, selected: false }}
        data = (selected + not_selected).sort_by{ |r| r[:name] }

        response = { success: true, data: data }
        render json: response
      end

      # A method which assigns selected roles to a user.
      # This method expects that only selected roles
      # (i.e. roles with `selected` attribute set to true).
      # It removes all other roles and assigns those selected
      # roles to the user.
      def assign_roles
        selected_roles = params[:roles]&.map { |r| r[:id] }
        user_roles = UserRole.where(id: selected_roles)
        @user.roles.destroy_all
        @user.roles = user_roles

        response = { success: true, message: 'Role assignment successful!' }
        render json: response
      end


      private

      def set_role
        @role = UserRole.find(params[:id])
      end

      def set_user
        @user = User.find(params[:id])
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mks_auth-1.0.14 app/controllers/mks/auth/user_roles_controller.rb
mks_auth-1.0.13 app/controllers/mks/auth/user_roles_controller.rb
mks_auth-1.0.12 app/controllers/mks/auth/user_roles_controller.rb
mks_auth-1.0.11 app/controllers/mks/auth/user_roles_controller.rb
mks_auth-1.0.10 app/controllers/mks/auth/user_roles_controller.rb
mks_auth-1.0.9 app/controllers/mks/auth/user_roles_controller.rb