PT-BR/hasObjectPermissionTo

From Multi Theft Auto: Wiki
Revision as of 19:37, 6 November 2021 by Lettify (talk | contribs)
Jump to navigation Jump to search

Template:BR/Funcao servidor Esta função retorna se o determinado objeto tem ou não acesso para realizar determinada ação.

Post-it.png Nota: Somente alguns nomes de ações funcionam. Esta função parece retornar nil e exibir um aviso de má argumentação quando é checado se um objeto tem permissões para uma ação que não comece com as palavras function., command. ou resource..

Os scripts frequentemente querem limitar acesso de seus recursos para usuários em particulares. A forma ingênua de fazer isto seria verificando se um jogador que está tentando realizar uma ação, está em um grupo da ACL (geralmente o grupo Admin). O principal problema disso é que o grupo Admin é maleável e nem sempre pode existir. Isto também não dá ao administrador do servidor qualquer flexibilidade. Ele pode querer permitir que seus 'moderadores' usem a função que está com acesso limitado, ou que desabilite esta função por completo.

É aqui que entra o uso adequado da ACL e, felizmente, isso é muito fácil. Tudo se resume a usar esta função. Esta função, com um nome um tanto confuso, permite que você verifique se um objeto da ACL (um jogador ou um resource) tem uma permissão da ACL. Neste caso, só vamos trabalhar com 'players'.

Então, primeiro de tudo, pense num nome para sua 'permissão'. Hum, imaginemos que queremos uma área privada em que somente determinados jogadores podem entrar, então vamos chamar nossa permissão de accessPrivateArea. Daí, tudo que você precisa fazer é usar a instrução 'if' no seu código:

if hasObjectPermissionTo ( player, "resource.YourResourceName.accessPrivateArea", false ) then
-- Seja lá o que você quer que aconteça se o jogador tem a permissão.
else
-- Seja lá o que você quer que aconteça se o jogador não tem a permissão.
end

Note que nomeamos a permissão usando resource.YourResourceName.accessPrivateArea - isso é só para deixar mais 'legível', para que o admin saiba qual resource a permissão pertence. É extremamente recomendado que você siga esta ideia. O argumento false se refere ao argumento defaultPermission, false indicando que se o usuário não tiver a permissão concedida ou não concedida (ex.: o admin não adicionou a permissão no config), por padrão ela não será concedida.

A única desvantagem de usar este método é que o admin terá de modificar sua configuração. As vantagens são que o admin tem muito mais controle e seu script vai funcionar para qualquer servidor, contanto que o administrador o tenha configurado.

Sintaxe

bool hasObjectPermissionTo ( string / element theObject, string theAction [, bool defaultPermission = true ] )

Sintaxe POO(OOP) Não entendeu o que significa isso?

Nota: Esta função é também uma função estática sob a classe ACL.
Método: ACL.hasObjectPermissionTo(...)

Argumentos necessários

  • theObject: O objeto para checar se tem a permissão. Aqui pode especificar um elemento client (ex.: player), um resource ou uma string nos seguintes formatos: "user.<name>" ou "resource.<name>".
  • theAction: A ação para verificar se o determinado objeto tem acesso. Ex.: "funcion.kickPlayer".

Argumentos opcionais

NOTA: Ao usar argumentos opcionais, pode ser necessário fornecer todos os argumentos anteriores ao que você deseja usar. Para obter mais informações sobre argumentos opcionais, consulte Argumentos Opcionais.

  • defaultPermission: A permissão padrão se nada é especificado em nenhum dos grupos em que o determinado objeto 'theObject' seja um membro. Se especificar true, o determinado objeto terá permissões para realizar a ação a não ser que o oposto esteja explicitamente especificado na ACL. Se false, a ação será negada por padrão a não ser que esteja explicitamente aprovado pela ACL.

Retorno

Retorna true se o objeto especificado tem permissão para realizar a determinada ação, false caso contrário. Retorna nil se a função falha pela má argumentação.

Exemplo

Este exemplo expulsa um jogador do servidor se o usuário que estiver usando tiver acesso à função `kickPlayer`.

-- Kick command
function onKickCommandHandler ( playerSource, commandName, playerToKick, stringReason )
    -- Does the calling user have permission to kick the player? Default
    -- to false for safety reasons. We do this so any user can't use us to
    -- kick players.
    if ( hasObjectPermissionTo ( playerSource, "function.kickPlayer", false ) ) then

        -- Do we have permission to kick the player? We do this so we can fail
        -- nicely if this resource doesn't have access to call that function.
        if ( hasObjectPermissionTo ( getThisResource (), "function.kickPlayer", true ) ) then
            -- Kick him
            kickPlayer ( playerToKick, playerSource, stringReason )
        else
            -- Resource doesn't have any permissions, sorry
            outputChatBox ( "kick: The admin resource is not able to kick players. Please give this resource access to 'function.kickPlayer' in the ACL to use this function.", playerSource )
        end
    else
        -- User doesn't have any permissions
        outputChatBox ( "kick: You don't have permissions to use this command.", playerSource )
    end
end
addCommandHandler ( "kick", onKickCommandHandler )

Veja também