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.
- Crie um script de servidor e codifique a lógica para validar os usuários que executam a operação de exclusão.
- 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.
- Clique em New Script (Novo script) e digite o nome como "Validar exclusão de cartão".
- Escolha Appraisal (Avaliação) no menu suspenso Form (Formulário).
- Escolha Job (Tarefa) como Execution Location (Local de execução) para executar o script.
- 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.
- Copie e cole o script abaixo em seu editor de script e substitua os nomes dos parâmetros.
- Você pode usar o ícone ? no canto superior direito do editor de scripts para se referir aos nomes dos parâmetros.
- Quando o script estiver pronto, Publish (Publique) -o.
- function beforeDelete(){
- var userProfileId = "<inserir ID do perfil aqui>";
- //Get profile ID from our API doc: Get profile details
- var productAdminRoleId = "<inserir ID da função aqui>";
- //Get role ID from our API doc: Get role details
-
- // This script allows users with Product Admin role alone to delete the cards. Employees with User profiles cannot delete the card.
- // Also due date must exceed the current date. Otherwise reject the card deletion.
-
- var user = current.User;
- var profile = user.getProfile();
- var roles = user.getRoles();
- if (profile.getId() == userProfileId) {
- throwError("You do not have permission to delete the card");
- }
-
- var hasRole = false;
- for (var i = 0; i < roles.length; i++) {
- var role = roles[i];
- if (role.getId() == productAdminRoleId) {
- hasRole = true;
- break;
- }
- }
-
- if (!hasRole) {
- throwError("You don't have Product Admin role to delete this card");
- }
-
- var dueDate = current.Job.getValue(current.Layout.Fields.duedate.id);
- if (dueDate) {
- var currentMillis = Date.now();
- var dueDateMillis = dateStringToTimestamp(dueDate);
- console.log("currentMillis < dueDateMillis = " + currentMillis < dueDateMillis);
- if (currentMillis < dueDateMillis) {
- throwError("Card's due date is in the future. Cannot delete it.");
- }
- }
-
- return true;
-
- }
-
-
- function dateStringToTimestamp(dateString) {
- // logic based on exact dateformat: mm-dd-yyyy h:mm a
- if (!dateString || !(typeof dateString === "string")) {
- return null;
- }
-
- var target = new Date();
-
- dateString = dateString.trim();
- var spaceSplitted = dateString.split(" ");
-
- var datePart = spaceSplitted[0];
- var dateSplitted = datePart.split("-");
- target.setMonth(+dateSplitted[0] - 1);
- target.setDate(dateSplitted[1]);
- target.setFullYear(dateSplitted[2]);
-
- if (!spaceSplitted[1]) {
- // there is no time detail in given dateString
- target.setHours(0, 0, 0, 0);
- } else {
- var timeSplitted = spaceSplitted[1].split(":");
- var isAmPm = spaceSplitted[2];
- if (!isAmPm) {
- target.setHours(timeSplitted[0], timeSplitted[1], 0, 0);
- } else {
- var ampm = isAmPm.toLowerCase();
- var hour = +timeSplitted[0];
- var mins = +timeSplitted[1];
- if (hour == 12 && ampm == "am") {
- hour = 0;
- } else if (hour == 12 && ampm == "pm") {
- hour = 12;
- } else if (ampm == "pm") {
- hour += 12;
- }
- target.setHours(hour, mins, 0, 0);
- }
- }
- return target.getTime();
- }
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.
- 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".
- 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".
- 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."