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