Должны ли несанкционированные действия в пользовательском интерфейсе быть скрыты, отключены или привести к ошибке?


это постоянный вопрос для меня, что я никогда не решал, поэтому я хотел бы ваш вклад. Если у меня есть действия, которые, как я знаю, пользователь не сможет выполнить из-за недостаточных привилегий или состояния объекта, должны ли элементы пользовательского интерфейса для этих действий быть скрыты от пользователя, видны, но отключены или видны и привести к ошибке при попытке? Каково было бы обоснование вашего ответа? Если вы отключены, не могли бы вы сообщить причину, почему и если да, то как?

Это веб интерфейс, поэтому я уже знаю, что мне нужно проверить входящий пост/получить разрешения и обрабатывать ошибки там в любом случае. Я в первую очередь говорю о том, как обрабатывать пользовательский интерфейс.

Это похоже на правила об отключении или скрытии элементов меню, хотя меня интересуют все типы элементов пользовательского интерфейса, а не только меню.

примеры:

  1. У меня новая страница, которая позволяет пользователю создать новое событие. События могут быть мастер событий и подсобытий. Создание мастер событий требует "EditMasterEvent" привилегия, при создании subevent требует только "EditEvent" привилегия. У меня есть выпадающее меню, которое позволяет выбрать существующее событие в качестве родителя (главное событие) или без родителя (это главное событие). Должен ли выбор " создать Главное событие "отображаться в раскрывающемся списке или опущен, если пользователь имеет только привилегии" EditEvent".

  2. удаление событий требует, чтобы Вы были администратором приложения или имели соответствующее редактирование разрешение для типа события. В последнем случае мероприятие также должно быть старше 5 лет. Удаление событий вызывает серьезные каскадное удаление связанных данных в системе и по юридическим причинам, эти данные должны храниться не менее 5 лет после события. Поскольку эта операция редка для обычного пользователя, типичным случаем является то, что действие недоступно. Следует ли показывать его всегда или только тогда, когда это действительно возможно?

13 53

13 ответов:

Как и почти все вопросы пользовательского интерфейса, ответ "это зависит".

вам нужно взвесить обнаруживаемость с удовлетворением пользователя, среди прочего. Например, разрешение недопустимого действия дает вам возможность объяснить, почему что-то является недопустимым. Это особенно полезно, если ответ на вопрос "почему это отключено" не очевиден. Для приложения, где большинство пользователей являются новичками, это важно.

с другой стороны, это может быть сильно неприятно видеть элемент управления, нажмите на него, только чтобы быть вознаграждены с "извините, вы не можете сделать это сейчас" сообщение. Приложение, которое я унаследовал пару лет назад, было изобилует такими вещами, и это сделало использование пользовательского интерфейса упражнением в разочаровании.

полностью скрывать функциональность, вероятно, редко бывает хорошей идеей. Представьте себе, что вы знаете какую-то функцию "была там минуту назад", но теперь ее нет. Будь то пункт меню или кнопку на панели инструментов или что-то еще, что делает его скрытым, может быть упражнение в отчаяние для конечный пользователь.

попробуйте сделать небольшое тестирование юзабилити, если только спросите следующего человека, которого вы видите: "Эй, есть ли смысл отключить это или показать вам информативный диалог". Достаточно одного другого мнения, чтобы заставить вас взглянуть на проблему с другой стороны.

итог: делайте то, что лучше всего служит пользователю. Все сценарии, которые вы упоминаете, являются допустимыми при определенных обстоятельствах. Как и во всех вопросах пользовательского интерфейса, спросите себя (или лучше, ваших пользователей), что лучше всего служит свои нужды.

скрытые - это лучший подход для действий, которые не доступны для текущего пользователя. Нет никакого смысла в том, чтобы пользователь тратил умственные усилия, выясняя, почему что-то отключено, если нет никаких действий, которые они могут предпринять, чтобы изменить это.

Disabled-это лучший подход для действий, которые иногда доступны, но не в данный момент или в текущем контексте. Отключенная опция должна передавать две вещи: во-первых, действие недоступно прямо сейчас, и во-вторых, есть что-то, что пользователь может сделать, чтобы сделать действие доступным (изменить некоторые настройки или разрешения, выбрать элемент, ввести необходимые данные и т. д.). Если вы можете указать, что нужно сделать, чтобы включить действие в подсказке - тем лучше. Включение / отключение действий при вводе пользователем данных или изменении контекста обеспечивает отличную обратную связь о том, что требуется программе.

сбой с ошибкой - это худший выбор. Вы должны только прибегнуть к отчету об ошибке для операции, которые могут сработать: вы не можете сказать, что он потерпит неудачу, кроме как при попытке.

отключить элементы, вместо того чтобы скрывать их. Таким образом, пользователь знает, что опция обычно будет доступна, и я предоставляю подсказку, чтобы объяснить, почему элемент в настоящее время недоступен.

Это зависит. Вы хотите, чтобы пользователь знал, что действие возможно, только не для них? В этом случае покажите им кнопку, но отключите ее. Например, если пользователь не имеет права на удаление, но другие пользователи делают это, они должны знать, что записи могут быть удалены, поэтому они могут попросить кого-то сделать это для них, если им нужно действие.

с другой стороны, если пользователь не должен даже знать о действии (например, пользователь, который не имеет доступ на чтение журналы аудита, вероятно, не должны знать, что эти журналы существуют) не должны видеть кнопку, поэтому полностью ее скройте.

большой вопрос!

пару вопросов:

Если вы размещаете элементы на странице, но отключаете их, все еще есть удаленный шанс, что пользователь может обработать систему и включить их с помощью javascriptlet.

Если вы не показываете их вообще, общая функциональность может быть немного запутанной для обычного пользователя. -Разве здесь не должна быть кнопка редактирования?"

Если вы собираетесь либо отображать и отключать, либо отображать и проверять элементы, я бы наверняка сделать проверку на стороне сервера. Не оставляйте проверку в руках JavaScript; я думаю, что причины этого очевидны.

Я склонен обрабатывать два разных типа ситуаций по-разному. Это действие, которое регулируется привилегией и состоянием объекта.

Если у человека недостаточно привилегий для выполнения действия, я скрываю опцию, они не знают, что могут выполнить действие.

Если опция недоступна, потому что объект не находится в состоянии, которое может использовать эту опцию, я отключаю ее, позволяя пользователю видеть эту опцию, но никакое действие не может быть сделанный.

из вашего примера:

  1. У меня не было бы" создать Главное событие " в качестве опции. У пользователя недостаточно прав для его просмотра.

  2. У меня была бы кнопка удаления, видимая администраторам. Затем, в зависимости от того, как вы делаете остальную часть сайта (много видимого текста, всплывающих подсказок, значков справки и т. д.), Я бы следовал этому соглашению об информировании пользователя, почему кнопка не используется в это время. И, возможно, положить таймер включен, выше, рядом с кнопкой с либо сколько лет сообщение или как долго, пока он не может быть удален.

в зависимости от элемента, мы будем либо скрывать их, либо отключить их. Если пользователь имеет доступ к большой функции, но не к меньшей части внутри нее, то мы скроем меньшую часть. Однако, если у пользователя есть доступ к нескольким крупным функциям, но не к другим, мы оставим их видимыми, но отключенными в качестве маркетинговой уловки, чтобы напомнить им, что функции доступны для покупки, если они решат, что они хотят их.

Я также видел некоторые программы, которые отключают пункт меню и меняют его текст на "войти, чтобы сделать бла..."

Мне это нравится, потому что это не оставляет меня с "почему это не работает?"чувство и говорит мне немедленно, что делать, чтобы заставить его работать. Не применимо в каждом случае, но это хороший подход, если вы можете его реализовать.

общее правило-использовать отключение, если пользователь может сделать что-то в UI, чтобы получить привилегию. Отключено означает, "вы можете сделать эту команду, но только не сейчас, как обстоят дела."Способ" включает в себя текущий выбор, поэтому используйте включение/отключение, если у пользователя есть привилегия EditEvent для старых объектов, но не для новых объектов. Должно быть четкое указание, какие объекты могут быть удалены, чтобы пользователи понимали, почему связанные команды отключены для некоторых объектов (например, если пользователи обычно знают, что записи должны храниться в течение 5 лет, может быть достаточно простого поля возраста, возможно, усиленного графической разницей для записей старше 5 лет).

используйте окна сообщений вместо отключения, если нет способа сделать причину отключения ясной для пользователя, предполагая, что они имеют среднее знание домена. Подсказки для отключенных элементов управления, кстати, являются отличной идеей, но сами по себе могут быть недостаточными.

прятаться, если пользователь никогда не имеет привилегий, независимо от того, что они делают в пользовательском интерфейсе, учитывая их текущее положение в организации (например, они не являются администратором приложений). Это загромождает и расстраивает, чтобы использовать отключение или окна сообщений для этого случая. Что касается пользователей, действия, для которых у них нет привилегий, не являются их работой (иначе у них была бы привилегия), и поэтому связанные элементы управления просто не должны существовать в их пользовательском интерфейсе. Документация или руководства по процедурам организации могут расскажите пользователям, как выполняются такие действия (например, "ваш руководитель создает для вас новые события.").

У меня есть более подробная информация на http://www.zuschlogin.com/?p=40.

Я бы сказал отключить с наведением, содержащим причину.

Это предотвращает пользователей от Интересно, что происходит в то же время давая им знать, что определенные действия возможны при правильных условиях.

У меня есть особая ненависть к приложениям, которые отключают кнопки. Если вы конечный пользователь - вы хотите знать, почему вы не можете использовать эту кнопку. То, что он посерел, ничего вам не говорит. Как вы добираетесь до государства, чтобы включить его? Подсказки-это одно из решений, но они не самые лучшие, многие пользователи будут бороться с подсказками (если вы не работаете с опытными пользователями).

мое личное ощущение заключается в том, что элементы всегда должны присутствовать. Если у пользователя недостаточно разрешений для их выполнения, они должны генерировать ошибку при нажатии.

Я знаю, что переводчикам не очень нравится создавать множество различных сообщений об ошибках "отказано в разрешении", поэтому это часто не делается в локализованных приложениях, которые, как правило, скрывают элементы.

на практике многие люди, как правило, скрывают варианты, а не даже в нелокализованные приложения.

другие люди предоставили хорошие ответы с обоснованным предложением, чтобы избежать скрытия элементов и вместо этого отключить их и дать некоторые подсказки по причинам.

Итак, я хотел бы посмотреть на это с другой точки зрения - но как скрыть некоторые элементы пользовательского интерфейса в тех случаях, когда пользователю не нужно их видеть, независимо от того, есть ли у него или нет разрешений на определенные действия, связанные с элементами?

например, скажем, пользователи какой-то роли получают доступ к продавцам записи в системе.

но тогда бизнес-аналитик говорит:"Посмотрите, есть выпадающий список с продавцами в этой форме, и мы не должны позволять некоторым конкретным ролям видеть это".

разработчик спрашивает: "Итак, мы просто удаляем разрешение" Read sellers " из этой роли, верно? Но аналитик отвечает: "Нет! Эта роль должна по-прежнему иметь возможность просматривать продавцов на странице продавцов. Это просто одна форма, где мы должны скрыть список для некоторых ролей и показать его другим роли."

Итак, разработчик добавляет разрешение под названием "Show sellers dropdown on the form X".

Ой, теперь у нас проблема. Доступ к данным контролируется двумя отдельными разрешениями. Теперь мы должны выяснить, как объединить их обоих. И что делать, если есть несколько форм, где список продавца должен быть скрыт для некоторых ролей? Как мы объединяем его с"читать список продавца"? Для нас, разработчиков, несколько понятно, что разрешение" читать " должно иметь более высокий приоритет над "View", поэтому даже если пользователь может" просмотреть "список, он все равно не должен его видеть (или видеть пустым или отключенным с полезной подсказкой), если у него нет разрешения" читать". Мы, разработчики и аналитики системы это знают. Но как должен знать об этом системный администратор? Должны ли мы научить его этому? Как мы можем гарантировать, что администратор не будет путать все эти "просмотр" и "Чтение" для одного списка данных?

Как видите, все становится грязным по одной причине - мы смешиваем данные обработка разрешений с удобствами пользовательского интерфейса в списке разрешений роли.

Я видел много проектов, где он становится грязным, потому что разрешения на стороне сервера слишком сильно связаны с пользовательским интерфейсом, который запрашивает проблемы и возможные дыры в безопасности (потому что у вас есть несколько элементов в Редакторе разрешений роли для одних и тех же действий с одними и теми же данными).

разрешения касаются доступа и операций с некоторыми конкретными данными. Пользовательский интерфейс может реагировать только на разрешения согласованным образом на протяжении всей системы (отключение с подсказками, скрытие и т. д.). Мы никогда не должны изобретать новые записи разрешений только для целей пользовательского интерфейса.

теперь вопрос остается-но как мы на самом деле скрываем элементы пользовательского интерфейса для некоторых пользователей системы, чтобы не перегружать их огромным количеством всегда отключенных элементов? Одним из решений могут быть рабочие области ролей. Если мы четко знаем, что пользователи какой-либо роли никогда не будут нуждаться в доступе к некоторым конкретным данным, мы создаем набор элементов управления пользовательского интерфейса, подобных разрешения, но на этот раз мы не называем их разрешения. И мы можем получить действительно фантазии, даже позволяя пользователям свободно настроить свое рабочее пространство и выбрать то, что они могут или не могут видеть. Конечно, разрешения всегда будут иметь самый высокий приоритет, но это повлияет только на данные и состояние элементов пользовательского интерфейса, а не на видимость.

Это мои два цента. К сожалению, я сам не работал над такой системой, где разрешения и параметры рабочего пространства пользовательского интерфейса аккуратно разделены потому что я всегда как-то слишком поздно прихожу к проекту, когда "ущерб уже нанесен". Но я надеюсь, что когда-нибудь у меня будет шанс. Я просто надеюсь найти хороший пример, как это сделать правильно, но почему-то поиск в Интернете не дает мне ничего полезного. Значит ли это, что никто другой не пришел к тем же выводам, что и я? Я не верю в это, кто-то в мире шаблонов корпоративного дизайна должен был давно заметить это несоответствие импеданса разрешения UI.