Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should unauthorized actions in the UI be hidden, disabled, or result in an error? [closed]

This is a perennial question for me that I've never really resolved so I'd like your input. If I have actions that I know a user will not be able to perform due to insufficient privileges or object state, should the UI elements for those actions be hidden from the user, visible but disabled, or visible and result in an error if attempted? What would be the rationale for your answer? If disabled, would you communicate the reason why and, if so, how?

This is a web interface so I already know that I need to check the incoming post/get for permissions and handle errors there anyway. I'm primarily talking about how to handle the UI.

This is similar to Rules about disabling or hiding menu items, though I am interested in all types of UI elements not just menus.

Examples:

  1. I have a New page that allows a user to create a new Event. Events can be master events or subevents. Creating a master event requires "EditMasterEvent" privilege, while creating a subevent requires only "EditEvent" privilege. I have a drop down that allows one to choose an existing event as the parent (master event) or no parent (this is a master event). Should the "Create Master Event" choice be shown on the dropdown or omitted if the user only has "EditEvent" privileges.

  2. Deleting events requires that you be an application administrator or have the appropriate edit permission for the event type. In the latter case, the event must also be more than 5 years old. Deleting an event causes major cascading deletes of related data in the system and for legal reasons this data must be kept for at least 5 years after the event. Since this operation is rare for the normal user, the typical case is that the action is not available. Should it be shown always or only when actually possible?

like image 1000
tvanfosson Avatar asked Dec 16 '08 16:12

tvanfosson


People also ask

How to explain why a button is disabled in UI?

Sometimes you need to use state-related buttons in your UI. For example, a button can become active when some condition is met. In this case, you should always explain why the button is disabled. For example, you can show a mouse on-hover tooltip that will explain that. Clear message that explains why the button is disabled.

Why can't I show a button disabled because of privileges?

A button disabled because of privileges should not be shown, because user cannot do anything to enable it. In all the examples, user expects to get the button enabled after well defined specified time or action. In your case, user does not seem to have any well defined action to get the button enabled.

Why is my authorize() not working?

If you have already configured your authorize () and you still have the same problem, you may check your route/api.php You may have a error declaring the same path for 2 Controller.

What is the difference between disabling and hiding options?

That pretty much describes your example where simply changing an adjacent option makes input possible. It’s better to use disabling rather than hiding because it helps the user anticipate what is necessary for certain options. Whenever disabling is used, you should make it clear what specifically enables the control.


1 Answers

Hidden - This is the best approach for actions that are never available to the current user. There is no point in having the user waste mental effort figuring out why something is disabled if there is no action they can take to change this.

Disabled - This is the best approach for actions that are sometimes available, but not at the moment or in the current context. A disabled option should convey two things: first, the action is not available right now, and second, there is something the user could do to make the action available (change some setting or permission, select an item, enter prerequisite data, etc.). If you can indicate what needs to be done to enable the action in a tooltip - all the better. Enabling/disabling actions as the user enters data or changes context provides excellent feedback about what the program requires.

Fail with an Error - This is the worst choice. You should only resort to an error report for operations that might work: you can't tell that it will fail except by trying.

like image 181
Stephen C. Steel Avatar answered Sep 19 '22 02:09

Stephen C. Steel