Controle da ACL de campos de função

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 2 min. de leitura
  • Ao avaliar o acesso a um campo de função, além de verificar o acesso ao campo de função em si, o sistema também verifica o acesso aos campos de contribuição da função. Campos de contribuição são aqueles usados como argumentos em uma determinada definição de função.

    Para obter mais informações sobre campos de função, consulte Campo de função.

    Em Rome e anteriores, o sistema simplesmente verifica o acesso ao campo de função em si (assim como em qualquer outro campo). Se as ACLs nesse campo permitirem o acesso, o usuário receberá o valor resultante, independentemente de ter acesso aos campos de contribuição.

    No Xanadu e em versões posteriores, o sistema também requer acesso a todos os campos de contribuição para permitir acesso ao campo da função. Se uma ou mais das ACLs de campo de contribuição recusarem o acesso, o campo de função também recusará o acesso.

    As únicas operações afetadas pelo novo requisito são leitura e report_view. Report_view tem seus próprios requisitos adicionais.

    Operação Descrição
    operação de leitura Um usuário tem acesso de leitura a um campo de função somente se as seguintes condições forem verdadeiras:
    • O usuário tem acesso de leitura ao campo da função.
    • O usuário tem acesso de leitura a todos os campos de contribuição usados na função.
    operação report_view Um usuário tem acesso report_view a um campo de função somente se todas seguintes condições forem verdadeiras:
    • O usuário tem acesso report_view ao campo da função.
    • O usuário tem acesso report_view a cada um dos campos de contribuição.
    • Há uma ACL de leitura habilitada somente por função, sem condições e sem um script, e o usuário tem essa função.
    • O usuário tem acesso de leitura somente de função aos campos de contribuição, de forma que somente ACLs sem condição ou script podem permitir.

    Exemplos

    Considerando:
    • Tabela: salário
    • Colunas: base, bônus, total (todos são números inteiros neste exemplo)
    • Campo de função: a coluna total é marcada como um campo de função, com a definição de função glidefunction:add(base, bonus).
    • Campos de contribuição: base e bônus, uma vez que já são usados na definição da função
    • Funções: salary_admin, bonus_admin
    Tabela 1. Exemplo 1: todos os campos permitem acesso
    ACLs Resultado
    total, base, bônus: leitura e report_view para a função salary_admin, sem condições ou scripts Um usuário com a função salary_admin recebe acesso de leitura e report_view ao total porque eles possuem a função necessária.
    Tabela 2. Exemplo 2: o campo de contribuição recusa o acesso de leitura
    ACLs Resultado
    • total, base: leitura e report_view para a função salary_admin, sem condições ou scripts
    • bônus: report_view para função salary_admin , sem condições ou scripts
    • bônus: leitura para função bonus_admin, sem condições ou scripts
    Foi recusado a um usuário com a função salary_admin o acesso de leitura e report_view para total, porque bônus recusa acesso de leitura a suas funções.
    Tabela 3. Exemplo 3: ACL de campo de contribuição possui script
    ACLs Resultado
    • total, base: leitura e report_view para a função salary_admin, sem condições ou scripts
    • bônus: report_view para a função bonus_admin, sem condições ou scripts
    • bônus: leitura para a função salary_admin, com um script (observe que não importa o que está no script, apenas que ele está lá)
    Um usuário com a função salary_admin recebe acesso de leitura para total, porque eles possuem a função necessária para todos os campos.

    Mas o mesmo usuário com salary_admin não recebe acesso ao report_view, porque a ACL de leitura com o script recusa o acesso por padrão para este caso, mesmo que ele tenha a função necessária.