Caso de negócio 4: definir condições para que os usuários excluam cartões usando scripts de servidor (antes de excluir)

Caso de negócio 4: definir condições para que os usuários excluam cartões usando scripts de servidor (antes de excluir)

As organizações fornecem permissões e privilégios a várias seções da equipe de acordo com suas funções e perfis. Para garantir que os dados no Qntrl só possam ser excluídos pelo pessoal certo, as organizações podem implementar critérios e condições complexos usando scripts de servidor.
 

Cenário de negócios

Para excluir cartões da orquestração de Avaliação da organização Zylker, o usuário no Qntrl deve ter uma função de Administrador do produto. Os funcionários com o perfil de usuário não devem ter permissão para excluir um cartão e os cartões com datas de vencimento futuras não devem ser excluídos.
 
Nota: mesmo que o perfil ou a função de um usuário não tenha permissões no Controle de acesso para excluir um cartão, esse script de servidor substitui as permissões existentes e permite que o usuário exclua o cartão.
 

Solução

Quando um usuário tenta excluir um cartão na orquestração de Avaliação, você pode acionar scripts de servidor para verificar as permissões do usuário e restringir a operação de exclusão.
  1. Crie um script de servidor e codifique a lógica para validar os usuários que executam a operação de exclusão.
  2. Exclua um cartão na orquestração de Avaliação e teste o script do servidor.
 

Configuração de exemplo

Etapa 1 – criar uma orquestração

Crie uma nova orquestração intitulada "Avaliação" e adicione campos personalizados relevantes a ela.


 
Depois que o formulário for salvo, prossiga para projetar o blueprint, definir permissões e publicar a orquestração.
 

Etapa 2: codificar scripts do servidor

Crie um novo script de servidor para a orquestração de Avaliação para validar os usuários.
  1. Clique em New Script (Novo script) e digite o nome como "Validar exclusão de cartão".
  2. Escolha Appraisal (Avaliação) no menu suspenso Form (Formulário).
  3. Escolha Job (Tarefa) como Execution Location (Local de execução) para executar o script.
  4. Escolha Before Delete (Antes de excluir) como Execution Trigger (Gatilho de execução) para executar este script sempre que a página do cartão for carregada.
  5. Copie e cole o script abaixo em seu editor de script e substitua os nomes dos parâmetros.
    1. Você pode usar o ícone ? no canto superior direito do editor de scripts para se referir aos nomes dos parâmetros.
  6. Quando o script estiver pronto, Publish (Publique) -o. 

  1. function beforeDelete(){
  2.     var userProfileId = "<inserir ID do perfil aqui>";
  3. //Get profile ID from our API doc: Get profile details
  4.     var productAdminRoleId = "<inserir ID da função aqui>";
  5. //Get role ID from our API doc: Get role details
  6.  
  7.     // This script allows users with Product Admin role alone to delete the cards. Employees with  User profiles cannot delete the card. 
  8.     // Also due date must exceed the current date. Otherwise reject the card deletion.
  9.  
  10.     var user = current.User;
  11.     var profile = user.getProfile();
  12.     var roles = user.getRoles();
  13.     if (profile.getId() == userProfileId) {
  14.         throwError("You do not have permission to delete the card");
  15.     }
  16.  
  17.     var hasRole = false;
  18.     for (var i = 0; i < roles.length; i++) {
  19.         var role = roles[i];
  20.         if (role.getId() == productAdminRoleId) {
  21.             hasRole = true;
  22.             break;
  23.         }
  24.     }
  25.  
  26.     if (!hasRole) {
  27.         throwError("You don't have Product Admin role to delete this card");
  28.     }
  29.  
  30.     var dueDate = current.Job.getValue(current.Layout.Fields.duedate.id);
  31.     if (dueDate) {
  32.         var currentMillis = Date.now();
  33.         var dueDateMillis = dateStringToTimestamp(dueDate);
  34.         console.log("currentMillis < dueDateMillis = " + currentMillis < dueDateMillis);
  35.         if (currentMillis < dueDateMillis) {
  36.             throwError("Card's due date is in the future. Cannot delete it.");
  37.         }
  38.     }
  39.  
  40.     return true;
  41.  
  42. }
  43.  
  44.  
  45. function dateStringToTimestamp(dateString) {
  46.     // logic based on exact dateformat: mm-dd-yyyy h:mm a
  47.     if (!dateString || !(typeof dateString === "string")) {
  48.         return null;
  49.     }
  50.  
  51.     var target = new Date();
  52.  
  53.     dateString = dateString.trim();
  54.     var spaceSplitted = dateString.split(" ");
  55.  
  56.     var datePart = spaceSplitted[0];
  57.     var dateSplitted = datePart.split("-");
  58.     target.setMonth(+dateSplitted[0] - 1);
  59.     target.setDate(dateSplitted[1]);
  60.     target.setFullYear(dateSplitted[2]);
  61.  
  62.     if (!spaceSplitted[1]) {
  63.         // there is no time detail in given dateString
  64.         target.setHours(0, 0, 0, 0);
  65.     } else {
  66.         var timeSplitted = spaceSplitted[1].split(":");
  67.         var isAmPm = spaceSplitted[2];
  68.         if (!isAmPm) {
  69.             target.setHours(timeSplitted[0], timeSplitted[1], 0, 0);
  70.         } else {
  71.             var ampm = isAmPm.toLowerCase();
  72.             var hour = +timeSplitted[0];
  73.             var mins = +timeSplitted[1];
  74.             if (hour == 12 && ampm == "am") {
  75.                 hour = 0;
  76.             } else if (hour == 12 && ampm == "pm") {
  77.                 hour = 12;
  78.             } else if (ampm == "pm") {
  79.                 hour += 12;
  80.             }
  81.             target.setHours(hour, mins, 0, 0);
  82.         }
  83.     }
  84.     return target.getTime();
  85. }



Etapa 2: excluir cartão

Para testar o script, exclua um cartão da orquestração de Avaliação usando diferentes perfis de usuário e funções.
  1. Quando alguém que não for usuário na função de administrador de produto excluir o cartão, uma mensagem de erro é exibida da seguinte forma: "Você não tem função de administrador de produto para excluir este cartão".
  2. Quando alguém com perfil de usuário exclui o cartão, uma mensagem de erro é exibida da seguinte forma: "Você não tem permissão para excluir o cartão".
  3. Quando um cartão com data de vencimento futura for excluído, uma mensagem de erro será exibida da seguinte forma: "A data de vencimento do cartão está no futuro. Não é possível excluí-lo."