it-swarm-pt.tech

É melhor evitar uma ação proibida ou exibir uma mensagem de erro / explicação?

Existem vários exemplos, por isso vou escolher um específico para focar a questão.

Digamos que um usuário possa ter características (ou permissões) específicas:
Admin, Virtual, Externo, Financeiro etc.

Para complicar as coisas, os usuários também têm licenças diferentes - Premium, Regular, Limitada etc.

Você provavelmente pode ver onde isso está acontecendo:
Digamos que um usuário com uma licença limitada não possa ser um administrador ou ter permissões financeiras.

Possibilidades:

  • O administrador vai para o perfil de, digamos, Zack e vê que ele não pode permitir que ele tenha permissões financeiras.
    O problema é que não está claro para o administrador o motivo (as informações da licença e as permissões não são exibidas no mesmo local e, mesmo que existissem, o administrador precisaria estar ciente da regra do sistema de "nenhuma permissão financeira para usuários limitados")
  • O administrador vê todas as permissões (vamos assumir implementadas por meio de caixas de seleção) ativadas e somente ao clicar é exibida uma mensagem de erro informando por que a operação foi negada.
    Agora o motivo é claro, mas o administrador teve que "desperdiçar" um clique para descobrir isso.

Existe uma maneira de impedir a ação e também explicar o porquê? Um controle desabilitado com uma dica de ferramenta funcionaria? Alguma ideia melhor?

Para mencionar brevemente outros exemplos - digamos que você tenha um gráfico interativo e possa mover a maioria dos pontos no gráfico, mas alguns devem ser estacionários. Você pode desenhá-los de maneira diferente para indicar que eles não podem ser movidos (sem explicar o porquê) ou pode deixar o usuário tentar arrastá-los e mostrar uma mensagem de erro.

27
Dan Barak

Dependendo do aplicativo, geralmente não mostro as partes da página às quais um usuário não tem acesso. Parece que você tem usuários alterando os direitos de outros usuários, portanto esse método pode não funcionar. Eu recomendaria exibir uma mensagem de erro sempre que exibir um elemento de entrada desativado. Os usuários podem ficar frustrados quando não conseguem executar uma ação que esperam poder executar. Se estiver desativado, eles provavelmente não entenderão o porquê e o removerão no programa. Da mesma forma, você deseja garantir que a mensagem seja a mais simples possível e direta. Mensagens de erro longas geralmente são ignoradas.

12
LoganGoesPlaces

Antes de ocultar completamente uma parte da interface do usuário para um recurso ao qual o usuário não tem acesso, considere:

  1. O usuário saberá sobre esse recurso?
  2. Eles vão gastar muito tempo procurando por isso?
  3. Você seria melhor mantê-lo em algum tipo de estado "desativado", juntamente com uma dica de ferramenta ou outro indicador, para que eles possam saber por que não está disponível?

Aqui está um exemplo simples. Suponha que seu aplicativo inclua a opção de impressão. Quando não há impressora disponível, você deve ocultar completamente o comando do menu de impressão? Isso causará confusão e perda de tempo à medida que o usuário percorre todos os menus e finalmente entra em contato com sua equipe de suporte técnico tentando encontrar o comando "imprimir"? Sua equipe de suporte técnico entenderá que esse usuário não está vendo o comando "imprimir"? Haverá efeitos colaterais indesejados se, por exemplo, a impressora estiver conectada, mas se desligou para economizar energia?

Como regra geral, acredito que, em muitos casos, especialmente nos casos em que uma opção está disponível, os usuários são atendidos melhor por uma opção desabilitada ou mesmo por uma opção habilitada que exibe uma mensagem de erro explicando POR QUE a opção não é atualmente disponível.

35
Joel Spolsky

Eu vejo duas abordagens diferentes.

Se as ações estiverem desabilitadas por causa de security, eu realmente tentaria removê-las, se possível. Fácil com itens de menu ou a maioria dos botões da barra de ferramentas.

Se as ações estiverem desabilitadas porque você possui uma versão mais barata do software, eu as manteria presentes, mas desabilitadas. Isso permite que o usuário saiba "você poderia ter isso se pagasse mais", enquanto que se ele fosse removido, eles não saberiam o que estavam perdendo. Vejo o pop-up "você não pode fazer isso por causa da licença" como uma UI ruim, pois o usuário não pode dizer se pode executar uma ação sem realmente tentar executá-la.

8
shemnon

Outra abordagem é não mostrar a ação.

Stack Exchange é um bom exemplo disso. Se eu não tenho direitos de "edição" nas postagens de outras pessoas, não vejo o link "editar" de todo. Isso significa que não tento clicar nele e me pergunto por que não funciona.

Isso pode não funcionar em todas as circunstâncias, mas no seu exemplo as opções/links "admin" e "financeiro" simplesmente não apareceriam para usuários limitados - mesmo nas telas de administração para esses usuários. Se o usuário foi alterado para um usuário "Regular" ou "Premium", essas opções/links apareceriam.

Você pode exibir o tipo de usuário em algum lugar semi-proeminente, para que o administrador possa ser lembrado do motivo pelo qual determinadas opções/links não são visíveis!

7
ChrisF

Como outras respostas declararam, se o usuário não tiver permissão para executar uma ação no sistema (como em, sem privilégios de edição/administrador), a ação não deverá ser exibida.

Nos casos em que as ações são desabilitadas devido ao estado do aplicativo (não é possível editar um arquivo somente leitura, não é possível copiar/colar se nenhum texto for selecionado, o usuário possui uma versão de avaliação do software que carece de alguns recursos, etc.) pense que a ação deve ser exibida, com uma indicação visual de que a ação não pode ser executada no momento. Observe que eu não digo "desativado", porque se o usuário tentar essa ação, ele poderá descobrir por que isso não é possível. Dessa forma, um usuário pode ver que a ação está desativada, mas também pode receber uma mensagem explicando o motivo.

Eu teria cuidado com o caso em que um usuário tem uma versão de avaliação/sublicenciada de um aplicativo que não possui recursos. Por exemplo, se você tiver um aplicativo de leitura/gravação ISO que não copie CDs, a menos que pague por ele, poderá mostrar a opção "rip CD", mas não permitir que o usuário o execute. Mas se o seu aplicativo possuir suítes inteiras com recursos nas versões mais sofisticadas (visual studio, por exemplo), exibir todas essas coisas, mas não permitir, pode ser frustrante para o usuário. Não quero abrir meus IDE e ver bancos de dados, redes, UML integrado, testes, criação de perfil, etc) quando sei que tudo o que estou licenciado para fazer é escrever e criar projetos .

6
Carson Myers

Minha regra geral é: se uma ação não estiver disponível para um usuário devido a permissões, ela não estará visível. Se uma ação não estiver disponível devido ao contexto temporário (este botão 'Salvar' não tem significado até o usuário digitar algo para salvar), ela será desativada.

"Permissões" abrange "usuário administrador x usuário comum" e "licença premium x licença barata". Os elementos inutilizáveis ​​da interface do usuário são desordenados - não é a maneira de anunciar seus recursos adicionais.

4

Muitas respostas parecem ter acertado isso, só queria resumir tudo com uma das heurísticas da Nielsen, que aponta exatamente para isso. Afirma:

Prevenção de erros Ainda melhor do que boas mensagens de erro, é um design cuidadoso que evita que um problema ocorra em primeiro lugar. Elimine condições propensas a erros ou verifique-as e apresente aos usuários uma opção de confirmação antes que eles se comprometam com a ação.

Fonte: http://www.useit.com/papers/heuristic/heuristic_list.html

4
Nacho

Eu realmente gosto de shemnon's resposta. Eu estenderia seu segundo caso e aplicaria o mandamento de Nielsen referenciado por ign; se o usuário tiver uma licença mais barata, eu desabilitaria a opção e substituiria o objeto de seleção por um ícone que tornasse claro o estado desabilitado da opção.

Algo como

  • O Opção 1
  • O Opção 2
  • alt text Opção 3
  • O Opção 4

Como esse produto supositório ainda está em desenvolvimento, também incluiria pelo menos uma declaração do nível de licença do usuário na mesma página. Dessa forma, o administrador vê o nível de licença do usuário ao mesmo tempo em que analisa as variáveis ​​do sistema diretamente afetadas por essa licença.

A beleza do software é que tudo o que você precisa fazer é chamar as informações.

Editar: Além disso, posso empregar um esquema de permissão centralizado em funções, em que as permissões podem ser atribuídas a funções e não a usuários individuais. Isso geralmente atenua uma tonelada de sobrecarga da necessidade de gerenciar micro permissões de usuário individuais.

  1. Admin abre a tela de edição de funções.
  2. O administrador talvez selecione um botão de opção para a licença mais baixa à qual a função será aplicada.
  3. Permissões que não estão disponíveis para a função selecionada são desabilitadas e "x" ed.
  4. Admin seleciona permissões das opções ativas restantes.
  5. Posteriormente, na tela de gerenciamento de usuários ou no perfil do usuário, o administrador vê a lista de funções que o usuário pode ter com base na licença e o administrador seleciona uma ou várias.
1
Matt

Em geral, minha regra geral é a seguinte (e eu preciso ter um bom motivo para quebrá-lo): se o raciocínio por trás do componente desabilitado fluir do contexto ou se entender que deve ser fácil para o usuário devido a outro motivo, então o bloqueio é a solução preferida. Senão, o usuário pode ficar frustrado tentando descobrir por que é assim e, pior ainda, provavelmente não se lembrará do motivo (caso tenha descoberto) na próxima vez que o encontrar.

1
Assimiz

Para responder sua pergunta específica, você deseja exibir informações suficientes para que os usuários possam entender as limitações antes de clicarem. No seu exemplo, você deve listar cada usuário com sua licença como um campo somente leitura visualmente conectado (por exemplo, por proximidade) com os controles para definir suas configurações. permissões. Ou você pode combinar o campo de licença dinamicamente com o rótulo das permissões (por exemplo, "Permissões (com licença limitada):").

Permissões não aplicáveis ​​provavelmente devem estar desabilitadas, não habilitadas e não ocultas. Se valer a pena, inclua texto em linha, texto suspenso/dicas de ferramentas ou um link para explicar por que as permissões não são permitidas pela licença (o texto em linha pode substituir os controles desabilitados se ele listar as permissões; por exemplo, “Admin , Financeiro não permitido para usuários limitados ").

A regra geral é usar a desativação se o usuário puder fazer algo na interface do usuário para ativar o comando. Desativado significa "você pode executar este comando, mas não agora, como estão as coisas". O "jeito que as coisas são" inclui a seleção atual. Sempre que você usa a desativação, deve haver uma indicação clara para que os usuários entendam por que os comandos associados estão desativados para alguns objetos.

Use caixas de mensagem em vez de desabilitar se não houver nenhuma maneira para esclarecer o motivo da desabilitação antes do usuário, supondo que ele possua um conhecimento médio do domínio. As dicas de ferramentas para controles desativados são uma ótima idéia, mas podem não ser suficientes por si só em todos os casos.

Use ocultar se o usuário nunca tiver acesso ao comando, não importa o que faça na interface do usuário, dada sua posição atual na organização. Por exemplo, ações não autorizadas pelo usuário, dadas suas permissões, simplesmente não aparecem. É desorganizado e frustrante usar caixas de mensagens ou de desativação neste caso. No que diz respeito aos usuários, as ações para as quais eles não têm direitos não são o trabalho deles (caso contrário, eles teriam acesso) e, portanto, os controles associados simplesmente não devem existir na interface do usuário. Os manuais de procedimentos da documentação ou da organização podem informar aos usuários como essas ações são realizadas (por exemplo, “Seu supervisor cria novas contas de clientes para você” ou “Você precisa de permissões financeiras para editar contas; consulte seu administrador para obter o procedimento para obter aprovação para atualizar suas permissões. ”).

Tenho detalhes sangrentos em Controlando seus controles .

1
Michael Zuschlag

Alguns dos pontos acima são ótimos, e eu não quero reiterar, mas ...

Nesse caso, eu teria todas as opções disponíveis visíveis. As opções que não eram aplicáveis ​​às suas regras devem estar desativadas (acinzentadas). É de conhecimento geral que um usuário de qualquer interface reconheça que, se algo estiver acinzentado, normalmente significa que não é aplicável a algum tipo de conjunto de regras em andamento.

Uma dica de ferramenta coincide perfeitamente com um botão desativado. Em alguns casos especiais e mais avançados, como o seu acima, com licenças, se o usuário sem a licença adequada estava visualizando uma área que exigia uma licença mais alta, alterando completamente a arte do botão para algo como "Atualizar agora!" em vez de acinzentá-lo, seria melhor publicidade para o produto e entenderia melhor.

Se o usuário administrador estivesse visualizando, obviamente veria que a opção financeira está acinzentada, com uma dica de ferramenta explicando o motivo.

Não conheço completamente o contexto do seu problema, pode até não haver um produto envolvido. Mas com base no que entendi, essa é a minha reação a isso.

1
user708

O Windows UXGuide possui vários recursos que podem ajudá-lo a decidir se deve mostrar erros ou impedir entrada inválida. Especificamente, existe ma seção que faz a declaração abaixo sobre a interface do usuário.

Não forneça mensagens de erro quando não for provável que os usuários executem uma ação ou alterem seu comportamento como resultado da mensagem. Se não houver ação que os usuários possam executar ou se o problema não for significativo, suprima a mensagem de erro.

Além disso, essa discussão me lembra um pouco o que Karl Shifflett em seu post no blog intitulado "Fort Knox Business Objects (sim/não)", onde ele avalia os prós e contras de permitir a entrada de objetos de negócios. um estado inválido ou não e como esta decisão afeta a interação do usuário.

Pessoalmente, costumo impedir que um usuário faça entradas inválidas ou desabilite controles que executam ações como botões na maioria das vezes, mas para alguns controles que envolvem entrada complexa de texto, costumo mostrar avisos em linha que são menos invasivos que as caixas de mensagens, mas ainda são o ponto de vista.

0
jpierson

Faça os dois: back-end e interface do usuário

Isso realmente não deveria ser uma situação ou. As outras respostas listam boas razões listadas para mostrar opções indisponíveis e boas razões para não mostrá-las. Mas o problema é que, de qualquer maneira, você precisa lidar com isso corretamente no back-end. Você ainda precisa verificar corretamente as entradas e permissões do usuário, mesmo que pense que a única entrada que eles podem fornecer é a adequada.

Isso é duplamente verdadeiro com qualquer aplicativo baseado na Web, em que o usuário possa ativar artificialmente um controle/opção/entrada desativada. Não permita que o uso do Firebug supere a capacidade do seu aplicativo de controlar o que eu posso fazer. Nos casos em que eles tentam usar uma opção que não deveria estar disponível, registre o evento.

0
Jeffrey Blake