Funções explícitas no CSM

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 12 min. de leitura
  • Você pode conceder acesso à sua instância a usuários internos e externos. No entanto, talvez você não queira que os dois tipos de usuários tenham o mesmo nível de acesso. Para fornecer segurança adicional, cada usuário deve ter pelo menos uma função para que a instância possa distinguir entre usuários internos e externos.

    A partir da versão Paris, nenhum usuário pode ter ambas as funções explícitas (snc_internal e snc_external). Os grupos e a contenção de função não podem incluir as duas funções, já que isso faria com que qualquer membro do grupo ou usuário atribuído a esse grupo ou função tenha automaticamente as ambas as funções. O Now Platform cancela qualquer operação que crie esse cenário.

    Usuários externos devem obter, no mínimo, a função snc_external. A função snc_external indica que o usuário é externo à organização. Eles não devem ter nenhum acesso aos recursos, a não ser os permitidos explicitamente por meio de ACLs para a função snc_external ou funções adicionais que herdam a função snc_external. Por padrão, os usuários com a função snc_external não podem acessar:
    • Recursos Scripted REST APIs que não estejam marcados como externos.
    • Tabelas sem a função que herda a função snc_external ou a função pública.
    • Recursos do tipo sem registro, como processadores e páginas de IU sem ter acesso à função snc_external ou uma função que herde a função snc_external.
    • Painéis Análise da plataforma.

    Não marque a função snc_internal como elevada. Caso contrário, os usuários internos não poderão acessar a instância.

    Funções de CSM recomendadas para usuários internos e externos

    Os clientes (usuários externos) que usam a aplicação Customer Service Management devem ser atribuídos à função sn_customerservice.customer ou sn_customerservice.consumer. Os agentes de atendimento ao cliente (usuários internos) devem ser atribuídos à função sn_customerservice_agent ou sn_customerservice_consumer_agent. O sistema garante que o mesmo usuário não seja atribuído a uma função de cliente (externa) e de agente (interna).

    Plug-in Explicit Roles

    O plug-in do Atendimento ao cliente (com.sn_customerservice) ativa o plug-in Explicit Roles (com.glide.explicit_roles), que adiciona as funções snc_external e snc_internal. Quando o plug-in é ativado:

    • Todos os usuários devem ter a função snc_internal para acessar recursos internos ou a função snc_external para acessar recursos externos.
    • Todos os usuários existentes são atribuídos automaticamente à função snc_internal. Esta função não muda os níveis de acesso existentes ou o comportamento do sistema. Em vez disso, ela fornece uma categoria para diferenciar usuários internos de usuários externos. Todos os usuários internos mantêm o mesmo nível de acesso de antes da ativação do plug-in.
      Dica:
      Para impedir a mudança da funcionalidade existente para os usuários, a ativação do plug-in Explicit Roles atribui a função do usuário snc_internal a todos os usuários existentes na instância. Isso inclui todos os usuários externos adicionados antes da ativação do plug-in Explicit Roles. Depois que o plug-in Explicit Roles for ativado, faça o seguinte para todos os usuários externos adicionados antes da ativação do plug-in Explicit Roles:
      • Remova a função snc_internal.
      • Adicione a função snc_external.
      Fazer o anterior garante que os usuários externos adicionados antes de ativar o plug-in Explicit Roles não tenham acesso a recursos internos que devem estar disponíveis somente para usuários internos.
    • Usuários recém-criados são atribuídos automaticamente à função snc_internal quando eles tentam se conectar à instância pela primeira vez, a menos que a função snc_external seja explicitamente atribuída a eles. Você pode adicionar a função snc_external a um novo usuário antes de ele se conectar à instância para fornecer direitos de usuário externo.
      Importante:
      Ative este plug-in durante uma janela de manutenção ou quando poucos usuários estiverem conectados. Os usuários conectados no momento em que o plug-in for ativado não serão atribuídos dinamicamente à função snc_internal. Em vez disso, os usuários devem sair e conectar-se novamente para serem atribuídos à função snc_internal. Quando o plug-in estiver ativado, você pode adicionar ou remover as funções snc_internal e snc_external a qualquer momento para alterar os direitos do usuário.
    • Todas as ACLs existentes que não tenham um requisito de função são atribuídas automaticamente à função snc_internal. Como as ACLs e as funções existentes foram atribuídas à função snc_internal, os níveis de acesso existentes não mudam.
    • As ACLs recém-criadas que não tenham um requisito de função são atribuídas automaticamente à função snc_internal. Esta atribuição de função não se aplica a uma ACL recém-criada com uma função atribuída.
    • Para todos os registros de Processador [sys_processor] existentes ou registros de Processador [sys_processor] recém-criados com Type=script, a função snc_internal será adicionada automaticamente ao campo Funções se este estiver vazio.
    • Para restringir o acesso a páginas de IU a usuários internos, o plug-in atribui automaticamente a função snc_internal à * ACL com um Tipo de ui_page.
    • Para restringir o acesso a processadores a usuários internos, o plug-in atribui automaticamente a função snc_internal à * ACL com um Tipo de processador.
    • Usuários externos devem obter, no mínimo, a função snc_external para acessar a instância. Esta função é atribuída automaticamente aos contatos externos do Portal de atendimento ao cliente. Se o Portal de atendimento ao cliente não estiver ativado, essa função deverá ser concedida manualmente a usuários externos. O acesso aos registros é concedido por meio de ACLs.
      Nota:
      Você pode usar a função isPublic () em scripts do Portal de atendimento ao cliente para alterar a configuração de privacidade de uma única inclusão de script do cliente chamável. Para obter mais detalhes, consulte Inclusões de script.
    • O acesso ao site do Sistema de gestão de conteúdo também é afetado. O CMS está configurado com Sites (content_site), Páginas (content_page) e outros recursos. Alguns dos sites podem ter a página de Login configurada.
      • Se os sites do CMS não tiverem a página de Login configurada, a função pública será adicionada automaticamente ao campo Funções de leitura em Páginas (content_page) se o campo estiver vazio.
      • Se os sites do CMS tiverem a página de Login configurada, a função snc_internal será adicionada automaticamente ao campo Funções de leitura em Páginas (content_page) se o campo estiver vazio.
    • O acesso ao site do Portal de serviços também é afetado.

      A função snc_internal não é adicionada automaticamente aos registros sp_page, sp_widget ou sp_instance. Se desejar, você pode atribuir a função a novos registros atribuindo snc_internal como um valor padrão no campo Funções dos registros. Para obter detalhes sobre este processo, consulte Especificar um valor de campo padrão.

    Não mova Conjuntos de atualizações do sistema entre instâncias com e sem o plug-in Explicit Roles habilitado.

    Nota:
    Este plug-in também requer o plug-in Contextual Security Manager.

    A propriedade glide.security.explicit_roles.internal_user_blacklist

    O plug-in Explicit Roles assume que todos os usuários existentes na tabela sys_user no momento em que o plug-in é instalado são clientes internos. Um script de correção atribui a função snc_internal a todos os usuários existentes e a qualquer ACL que não tenha uma função.

    O script de correção pode falhar ou não terminar a tempo para um usuário que não foi atualizado com a função e que tente acessar um recurso. Para preencher essa possível lacuna, o Contextual Security Manager (CSM) atribui automaticamente a função snc_internal a qualquer usuário que se conecte e não tenha uma função explícita (interna ou externa).

    Além disso, o CSM tem um processo de regra de negócios que atribui a função snc_external a uma classificação de seus usuários. No entanto, ao importar grandes conjuntos de clientes externos de CSM, o fluxo de trabalho será definido como falso, portanto, as regras de negócios não serão executadas. Conforme esses usuários tentam acessar um recurso, eles não têm nenhuma função explícita. O Gerente de segurança contextual atribui a função snc_internal por meio de um trabalho agendado chamado Relatório de conflitos e lacunas do plantão que é executado a cada 7 dias. Quando o plug-in Explicit Roles está ativo, este trabalho atribui a função snc_internal ao usuário externo do CSM, já que o usuário não tem a função snc_internal nem a snc_external.

    Para impedir que a função snc_internal seja fornecida inadvertidamente a usuários externos, o plug-in Explicit Roles inclui uma propriedade glide.security.explicit_roles.internal_user_blacklist para impedir que tipos de usuários se tornem snc_internal. Se não houver tipos de usuários na tabela glide.security.explicit_roles.internal_user_blacklist, por padrão o Contextual Security Manager atribuirá a função snc_internal a todos os usuários. Se houver nomes de classe na tabela lista de bloqueios e se o tipo de classe sys_user estiver na tabela lista de bloqueios, o CSM atribuirá a função snc_external. Caso contrário, o CSM atribuirá a função snc_internal padrão como de costume.

    Para a versão Paris, esta propriedade é habilitada por padrão para instâncias zboot e desabilitada por padrão para upgrades.

    Fornecendo acesso a tabelas para usuários externos

    Você pode fornecer a usuários externos acesso a uma tabela adicionando uma função à tabela que herda a função snc_external. Para obter mais informações, consulte Forneça aos usuários externos acesso a uma tabela.

    O método hasRoles()

    O método hasRoles() ainda está disponível, mas será descontinuado na versão Geneva. Em vez disso, use o método hasRole(nome da função).

    Se você usar o método hasRoles(), observe estas mudanças:
    • Este método exclui automaticamente a função snc_internal ao verificar as funções. Isso significa que se um usuário tiver apenas a função snc_internal, o método hasRoles() ainda retornará falso.
    • Se o usuário tiver a função snc_external, o método retornará falso porque a instância considera que os usuários externos não têm uma função.

    Exclusão mútua: snc_external versus snc_internal

    Now Platform impede que os usuários tenham as funções snc_external e snc_internal. Now Platform aplica esta exclusão mútua em todos os lugares do sistema e grava mensagens de erro nos logs de cada conflito.
    Nota:
    As ACLs podem ter ambas as funções se os recursos de ACL devem ser acessíveis a todos os usuários.
    Exemplo: adicionar as duas funções explícitas a um usuário (colisão direta):
    1. Atribua ao usuário Abel Tuter a função snc_internal.
    2. Atribua ao usuário Abel Tuter a função snc_external.

    Resultado: a adição da função snc_external falhará porque Abel Tuter tem a função snc_internal.

    Exemplo: adicionar as duas funções explícitas a um grupo (colisão direta):

    1. Considere um grupo chamado Grupo de Teste que atualmente não tem funções explícitas atribuídas a ele.
    2. Adicione Abel Tuter ao Grupo de Teste.
    3. Adicione a função snc_external ao Grupo de Teste.

    Resultado: a adição da função snc_external falhará porque Abel Tuter já tem a função snc_internal e não pode ter as duas funções.

    Exemplo: adicionar uma função explícita a um grupo em que um membro do grupo tem a função explícita conflitante (colisão indireta):
    1. Atribua ao usuário Abel Tuter a função snc_internal.
    2. Considere um grupo chamado Grupo de Teste que atualmente não tem funções explícitas atribuídas a ele.
    3. Adicione Abel Tuter ao grupo de teste.
    4. Adicione a função snc_external ao Grupo de Teste.

    Resultado: a adição da função snc_external ao grupo falhará porque Abel Tuter herdaria a função snc_external por sua associação ao grupo. As duas funções explícitas seriam atribuídas ao mesmo usuário, o que não é permitido.

    Para outros exemplos, consulte a tabela a seguir:

    Função Tentativa de ação Resultado
    Colisão direta
    O usuário tem a função snc_internal. Adicione a função snc_external. A ação é anulada.
    O usuário tem a função snc_external. Adicione a função snc_internal. A ação é anulada.
    O usuário não tem função explícita. Adicione a função snc_internal ou snc_external. A função é adicionada.
    O usuário tem ambas as funções explícitas (colisão existente). Adicione o usuário a um grupo sem funções. A ação é anulada.
    Uma função não associada a nenhum usuário contém a função snc_internal. Adicione a função snc_external. A ação é anulada.
    Uma função não associada a nenhum usuário contém a função snc_external. Adicione a função snc_internal. A ação é anulada.
    Uma função tem ambas as funções explícitas (colisão existente). Adicione a função a um usuário, função ou grupo. A ação é anulada.
    Um grupo sem membros tem a função snc_internal. Adicione a função snc_external. A ação é anulada.
    Um grupo sem membros tem a função snc_external. Adicione a função snc_internal. A ação é anulada.
    Um grupo sem membros não tem funções. Adicione a função snc_internal ou snc_external. A função é adicionada.
    Colisão indireta
    Contenção de função com colisão
    1. Conceda uma função chamada Função de Teste a um usuário com a função snc_internal.
    2. Adicione a função snc_external à Função de Teste.
    A ação é anulada.
    Contenção de função sem colisão
    1. Conceda uma função chamada Função de Teste a um usuário sem funções.
    2. Adicione a função snc_external à Função de Teste.
    A função é adicionada ao usuário e à Função de Teste.
    Contenção de grupo com colisão
    1. Adicione um usuário que tenha a função snc_internal a um grupo chamado Grupo de Teste 2 (secundário do Grupo de Teste 1).
    2. Adicione a função snc_external ao Grupo de Teste 2.
    3. Adicione a função snc_external a um grupo primário chamado Grupo de teste 1 (primário do Grupo de Teste 2).
    A ação é anulada.
    Contenção de grupo sem colisão
    1. Adicione um usuário sem funções a um grupo chamado Grupo de Teste 2 (secundário do Grupo de Teste 1).
    2. Adicione a função snc_external ou snc_internal ao Grupo de Teste 1 (primário do Grupo de Teste 2).
    A função é adicionada ao grupo primário, ao grupo secundário e ao usuário.
    Contenção de grupo com colisão mais contenção de função com colisão Adicione contains_external ao Grupo de Teste 1, o primário do Grupo de Teste 2. O Grupo de Teste 1 e o Grupo de Teste 2 obtêm contains_external, mas não obtêm explicitamente a função snc_external.
    Adicione a função snc_internal ao Grupo de Teste 2, o secundário do Grupo de Teste 1. A ação é anulada.
    Mudança de grupo primário mais contenção de grupo
    1. Remova o Grupo de Teste 1 como primário do Grupo de Teste 2.
    2. Adicione a função snc_internal ao Grupo de Teste 1.
    3. Adicione a função snc_external ao Grupo de Teste 2.
    4. No Grupo de Teste 2, defina o Grupo de Teste 1 como o grupo primário e salve.
    A ação é anulada.

    Repita para grupos já aninhados, com a mesma expectativa.

    A causa de uma ação anulada aparece na mensagem de erro e deve ser resolvida antes que outra tentativa seja bem-sucedida.

    Para casos diretos, como adicionar uma função explícita a um usuário individual, verifique qual função explícita o usuário deve ter. Se o usuário tiver a função explícita incorreta, ele deverá ser removido primeiro e, em seguida, a função explícita correta deverá ser adicionada.

    Para casos indiretos, como adicionar uma função explícita a um grupo (para que um membro do grupo receba as duas funções explícitas), avalie se esse usuário deve estar no grupo. Além disso, determine se o grupo deve receber a função explícita, incluindo qualquer herança por meio da hierarquia de grupo e contenção de função.

    Observe que o Now Platform relata somente a primeira colisão possível encontrada. Se as tentativas repetidas continuarem a falhar após a correção, com uma causa raiz diferente a cada vez, reavalie a interdependência de usuário / grupo / função relevante de forma mais ampla. Talvez seja necessário repensar como os grupos e as contenções de função estão estruturados.