it-swarm-vi.tech

Là tốt hơn để ngăn chặn một hành động bị cấm hoặc hiển thị một thông báo lỗi / giải thích?

Có nhiều ví dụ, vì vậy tôi sẽ chọn một ví dụ cụ thể để tập trung vào câu hỏi.

Giả sử người dùng có thể có các đặc điểm (hoặc quyền) cụ thể:
[.__.] Quản trị viên, ảo, bên ngoài, tài chính, v.v.

Để làm phức tạp mọi thứ, người dùng cũng có các giấy phép khác nhau - Premium, Thường xuyên, Hạn chế, v.v.

Bạn có thể thấy nơi này sẽ diễn ra:
[.__.] Giả sử người dùng có giấy phép hạn chế không thể là Quản trị viên hoặc có quyền tài chính.

Khả năng:

  • Quản trị viên truy cập vào hồ sơ của, giả sử Zack và thấy anh ta không thể cho phép anh ta có quyền tài chính.
    [.___ "không có quyền tài chính cho người dùng hạn chế")
  • Quản trị viên thấy tất cả các quyền (giả sử được thực hiện thông qua các hộp kiểm) được bật và chỉ khi nhấp vào mới nhận được thông báo lỗi cho biết lý do tại sao thao tác bị từ chối.
    [.__.] Bây giờ lý do đã rõ ràng, nhưng quản trị viên đã phải "lãng phí" một cú nhấp chuột để tìm ra điều đó.

Có cách nào để ngăn chặn hành động và cũng giải thích tại sao không? Một điều khiển bị vô hiệu hóa với một tooltip có hoạt động không? Còn ý tưởng nào hay hơn không?

Để đề cập ngắn gọn các ví dụ khác - giả sử bạn có một biểu đồ tương tác và bạn có thể di chuyển hầu hết các điểm trên biểu đồ, nhưng một số phải đứng yên. Bạn có thể vẽ chúng khác nhau để cho biết chúng không thể được di chuyển (mà không giải thích lý do) hoặc bạn có thể để người dùng thử kéo chúng và sau đó hiển thị thông báo lỗi.

27
Dan Barak

Tùy thuộc vào ứng dụng, tôi thường không hiển thị các phần của trang mà người dùng không có quyền truy cập. Có vẻ như bạn có người dùng thay đổi quyền của người dùng khác, vì vậy phương pháp này có thể không hoạt động. Tôi sẽ khuyên bạn nên hiển thị một thông báo lỗi bất cứ khi nào bạn hiển thị một yếu tố đầu vào bị vô hiệu hóa. Người dùng có thể trở nên thất vọng khi họ không thể thực hiện một hành động mà họ mong đợi có thể thực hiện. Nếu nó chỉ bị vô hiệu hóa, có lẽ họ sẽ không hiểu tại sao và sẽ chỉ đưa nó ra khỏi chương trình. Tương tự như vậy, bạn muốn chắc chắn rằng thông điệp là đơn giản nhất có thể và đến điểm. Thông báo lỗi dài thường bị bỏ qua.

12
LoganGoesPlaces

Trước khi bạn ẩn hoàn toàn một phần của giao diện người dùng cho một tính năng mà người dùng không có quyền truy cập, hãy xem xét:

  1. Người dùng sẽ biết về tính năng đó chứ?
  2. Họ sẽ dành nhiều thời gian để săn lùng nó chứ?
  3. Bạn có nên giữ nó ở một trạng thái "bị vô hiệu hóa" cùng với một chú giải công cụ hoặc chỉ báo khác để họ có thể tìm hiểu lý do tại sao nó không có sẵn không?

Đây là một ví dụ đơn giản. Giả sử rằng ứng dụng của bạn bao gồm tùy chọn để in. Khi không có sẵn máy in, bạn có nên ẩn hoàn toàn lệnh menu in không? Điều này có gây nhầm lẫn và lãng phí thời gian khi người dùng tìm kiếm trong tất cả các menu và cuối cùng liên hệ với nhóm hỗ trợ kỹ thuật của bạn đang cố gắng tìm lệnh "in" không? Nhóm hỗ trợ kỹ thuật của bạn thậm chí có hiểu rằng người dùng này không nhìn thấy lệnh "in" không? Sẽ có tác dụng phụ ngoài ý muốn nếu, ví dụ, máy in được gắn nhưng đã tự tắt để tiết kiệm điện?

Theo nguyên tắc chung, tôi tin rằng trong nhiều trường hợp, đặc biệt là các trường hợp đôi khi có sẵn tùy chọn, người dùng được phục vụ tốt nhất bởi tùy chọn bị vô hiệu hóa hoặc thậm chí là tùy chọn được bật mang đến thông báo lỗi giải thích TẠI SAO tùy chọn không phải là hiện tại có sẵn.

35
Joel Spolsky

Tôi thấy hai cách tiếp cận khác nhau.

Nếu các hành động bị vô hiệu hóa vì bảo mật Tôi thực sự sẽ cố gắng loại bỏ chúng nếu có thể. Dễ dàng với các mục menu hoặc hầu hết các nút thanh công cụ.

Nếu các hành động bị vô hiệu hóa do bạn có phiên bản phần mềm rẻ hơn, tôi sẽ giữ chúng hiện diện nhưng bị vô hiệu hóa. Điều này cho phép người dùng biết "bạn có thể có thứ này nếu bạn trả nhiều tiền hơn" trong khi nếu nó bị xóa thì họ sẽ không biết họ đang thiếu gì. Tôi xem cửa sổ bật lên "bạn không thể làm điều này vì giấy phép" là giao diện người dùng xấu vì người dùng không thể biết liệu họ có thể thực hiện một hành động mà không thực sự cố gắng thực hiện hành động đó hay không.

8
shemnon

Một cách tiếp cận khác là không thể hiện hành động nào cả.

Trao đổi ngăn xếp là một ví dụ tốt về điều này. Nếu tôi không có quyền "chỉnh sửa" bài đăng của người khác, tôi sẽ không thấy liên kết "chỉnh sửa" tất cả. Điều này có nghĩa là tôi không thử nhấp vào nó và tự hỏi tại sao nó không hoạt động.

Điều này có thể không hoạt động trong mọi trường hợp, nhưng trong ví dụ của bạn, các tùy chọn/liên kết "quản trị" và "tài chính" sẽ không xuất hiện cho người dùng hạn chế - ngay cả trong màn hình quản trị cho những người dùng đó. Nếu người dùng được thay đổi thành người dùng "Thông thường" hoặc "Cao cấp" thì các tùy chọn/liên kết đó sẽ xuất hiện.

Sau đó, bạn có thể xem xét hiển thị loại người dùng ở đâu đó nổi bật để người quản trị có thể được nhắc nhở về lý do tại sao các tùy chọn/liên kết nhất định không hiển thị!

7
ChrisF

Như các câu trả lời khác đã nêu, nếu người dùng không có quyền thực hiện một hành động trong hệ thống (như trong, không có đặc quyền chỉnh sửa/quản trị viên), thì hành động đó hoàn toàn không nên được hiển thị.

Trong trường hợp hành động bị vô hiệu hóa do trạng thái ứng dụng (không thể chỉnh sửa tệp chỉ đọc, không thể sao chép/dán nếu không có văn bản nào được chọn, người dùng có phiên bản dùng thử của phần mềm thiếu một vài tính năng, v.v.) Cá nhân tôi nghĩ rằng hành động nên là hiển thị, với dấu hiệu trực quan rằng hành động hiện không thể được thực hiện. Lưu ý rằng tôi không nói "bị vô hiệu hóa" bởi vì nếu người dùng cố gắng hành động đó, họ sẽ có thể tìm ra lý do tại sao điều đó không thể thực hiện được. Bằng cách này, người dùng có thể thấy rằng hành động bị vô hiệu hóa, nhưng họ cũng có thể nhận được một thông báo giải thích lý do.

Tôi sẽ cẩn thận với trường hợp người dùng có phiên bản dùng thử/chưa được cấp phép của ứng dụng thiếu tính năng. Ví dụ: nếu bạn có ứng dụng đọc/ghi ISO không trích xuất CD trừ khi bạn trả tiền cho nó, thì bạn có thể hiển thị tùy chọn "rip CD" nhưng không cho phép người dùng thực hiện. Nhưng nếu ứng dụng của bạn có toàn bộ các tính năng đáng giá trong các phiên bản cao cấp hơn (ví dụ như studio trực quan) thì sẽ hiển thị tất cả những thứ đó nhưng không cho phép chúng gây khó chịu cho người dùng. Tôi không muốn mở IDE và xem các bộ cơ sở dữ liệu, mạng, UML tích hợp, thử nghiệm, định hình, v.v. khi tôi biết rằng tất cả những gì tôi được cấp phép để thực hiện là viết và xây dựng dự án .

6
Carson Myers

Nguyên tắc nhỏ của tôi là: Nếu một hành động không có sẵn cho người dùng vì quyền, thì nó không hiển thị. Nếu một hành động không khả dụng do bối cảnh tạm thời (nút 'Lưu' này không có ý nghĩa gì cho đến khi người dùng đã nhập một cái gì đó để lưu), thì nó sẽ bị vô hiệu hóa.

"Quyền" bao gồm cả "người dùng quản trị so với người dùng thông thường" và "giấy phép cao cấp so với giấy phép giá rẻ". Các yếu tố UI không thể sử dụng là lộn xộn - không phải là cách để quảng cáo các tính năng bổ sung của bạn.

Nhiều câu trả lời dường như đã đúng, chỉ muốn tổng hợp tất cả bằng một trong những phỏng đoán của Nielsen, trong đó chỉ ra chính xác điều này. Nó nói:

Ngăn ngừa lỗi Thậm chí tốt hơn các thông báo lỗi tốt là một thiết kế cẩn thận ngăn chặn sự cố xảy ra ngay từ đầu. Hoặc loại bỏ các điều kiện dễ bị lỗi hoặc kiểm tra chúng và cung cấp cho người dùng một tùy chọn xác nhận trước khi họ cam kết hành động.

Nguồn: http://www.useit.com/ con/heuristic/heuristic_list.html

4
Nacho

Tôi thực sự thích shemnon's trả lời. Tôi sẽ mở rộng trường hợp thứ hai của anh ấy và áp dụng điều răn Nielsen được tham chiếu; nếu người dùng có giấy phép rẻ hơn, tôi sẽ vô hiệu hóa tùy chọn và thay thế đối tượng lựa chọn bằng một biểu tượng để làm rõ hơn trạng thái bị vô hiệu hóa của tùy chọn.

Cái gì đó như

  • Tùy chọn 1
  • Tùy chọn 2
  • alt text Lựa chọn 3
  • Tùy chọn 4

Vì sản phẩm giả định này vẫn đang được phát triển, tôi cũng sẽ bao gồm ít nhất một tuyên bố về cấp giấy phép của người dùng trên cùng một trang. Bằng cách đó, quản trị viên thấy rằng cấp giấy phép của người dùng đồng thời với quản trị viên đang xem xét các biến hệ thống bị ảnh hưởng trực tiếp bởi giấy phép đó.

Một nét đẹp của phần mềm là tất cả những gì bạn phải làm là gọi thông tin.

Chỉnh sửa: Ngoài ra, tôi có thể sử dụng lược đồ quyền tập trung vào vai trò, trong đó quyền có thể được gán cho vai trò chứ không phải người dùng cá nhân. Điều này thường giảm nhẹ một tấn chi phí từ việc cần đến các quyền của người dùng cá nhân.

  1. Quản trị viên mở màn hình chỉnh sửa vai trò.
  2. Quản trị viên có thể chọn nút radio cho giấy phép thấp nhất mà vai trò sẽ được áp dụng.
  3. Các quyền không có sẵn cho vai trò đã chọn sẽ bị vô hiệu hóa và "x" ed.
  4. Quản trị viên chọn quyền từ các tùy chọn hoạt động còn lại.
  5. Sau đó, trong màn hình quản lý người dùng hoặc hồ sơ người dùng, quản trị viên sẽ thấy danh sách các vai trò mà người dùng có thể có dựa trên giấy phép và quản trị viên chọn một hoặc nhiều vai trò.
1
Matt

Nói chung, quy tắc ngón tay cái của tôi diễn ra như thế này (và tôi cần phải có lý do chính đáng để phá vỡ nó): Nếu lý do đằng sau thành phần bị vô hiệu hóa xuất phát từ bối cảnh hoặc việc hiểu nó sẽ dễ dàng cho người dùng vì lý do khác, sau đó chặn là giải pháp ưa thích. Khác, người dùng có thể thất vọng khi cố gắng tìm hiểu tại sao nó lại như thế này, và tệ hơn, có lẽ sẽ không nhớ lý do của nó (trường hợp anh ta đã tìm ra) vào lần tiếp theo.

1
Assimiz

Để trả lời câu hỏi cụ thể của bạn, bạn muốn hiển thị đủ thông tin để người dùng có thể hiểu các giới hạn trước khi họ nhấp vào. Trong ví dụ của bạn, bạn nên liệt kê mỗi người dùng có giấy phép của họ dưới dạng trường chỉ đọc được kết nối trực quan (ví dụ: bằng khoảng cách) với các điều khiển để đặt quyền. Hoặc bạn có thể kết hợp trường giấy phép một cách linh hoạt với nhãn cho các quyền (ví dụ: Quyền Quyền (với Giấy phép có giới hạn): Trực).

Quyền không áp dụng có lẽ nên bị vô hiệu hóa, không được kích hoạt và không bị ẩn. Nếu nó có giá trị lộn xộn, bao gồm văn bản nội tuyến, văn bản di chuột/chú giải công cụ hoặc liên kết để giải thích lý do tại sao các quyền không được phép của giấy phép (văn bản nội tuyến có thể thay thế các điều khiển bị vô hiệu hóa nếu nó liệt kê các quyền; , Tài chính không được phép cho người dùng có giới hạn.

Nguyên tắc chung là sử dụng vô hiệu hóa nếu người dùng có thể làm gì đó trong UI để kích hoạt lệnh. Vô hiệu hóa có nghĩa là bạn có thể thực hiện lệnh này, nhưng không phải lúc này mọi thứ đang diễn ra. Cách thức của mọi người là những người khác bao gồm các lựa chọn hiện tại. Bất cứ khi nào bạn sử dụng vô hiệu hóa, cần có một dấu hiệu rõ ràng để người dùng hiểu tại sao các lệnh liên quan bị vô hiệu hóa đối với một số đối tượng.

Sử dụng hộp thông báo thay vì vô hiệu hóa nếu không có không có cách nào để đưa ra lý do vô hiệu hóa rõ ràng cho người dùng trước khi cho rằng họ có kiến ​​thức trung bình về tên miền. Chú giải công cụ cho các điều khiển bị vô hiệu hóa là một ý tưởng tuyệt vời, nhưng có thể bản thân chúng không đủ.

Sử dụng ẩn nếu người dùng không bao giờ có quyền truy cập vào lệnh cho dù họ làm gì trong UI với vị trí hiện tại của họ trong tổ chức. Ví dụ: các hành động không được người dùng ủy quyền cho phép của họ chỉ đơn giản là don xuất hiện. Thật lộn xộn và bực bội khi sử dụng hộp vô hiệu hóa hoặc hộp thông báo cho trường hợp này. Theo như người dùng quan tâm, các hành động mà họ không có quyền không phải là công việc của họ (nếu không thì họ có quyền truy cập) và do đó, các điều khiển liên quan đơn giản là không tồn tại trong UI của họ. Tài liệu hướng dẫn về thủ tục tài liệu hoặc tổ chức có thể cho người dùng biết những hành động đó được thực hiện như thế nào (ví dụ, giám sát viên của bạn tạo tài khoản khách hàng mới cho bạn. Hoặc bạn cần có quyền Tài chính để chỉnh sửa tài khoản, hãy xem quản trị viên của bạn để biết phê duyệt để nâng cấp quyền của bạn. NÓI).

Chi tiết tin đồn của Iveve tại Kiểm soát kiểm soát của bạn .

1
Michael Zuschlag

Một số điểm ở trên là tuyệt vời và tôi không muốn lặp lại, nhưng ...

Trong trường hợp này, tôi sẽ có tất cả các tùy chọn có sẵn hiển thị. Các tùy chọn không được áp dụng trong quy tắc của bạn, nên bị vô hiệu hóa (chuyển sang màu xám). Người dùng của bất kỳ giao diện nào cũng có thể nhận ra rằng nếu có thứ gì đó bị mờ đi, điều đó có nghĩa là nó không áp dụng cho một số loại quy tắc đang diễn ra.

Một mẹo công cụ trùng khớp với một nút bị vô hiệu hóa hoàn hảo. Trong một số trường hợp đặc biệt, nâng cao hơn như của bạn ở trên có giấy phép, nếu người dùng không có giấy phép phù hợp đang xem một khu vực yêu cầu giấy phép cao hơn, thay đổi hoàn toàn nghệ thuật của nút thành một cái gì đó như "Nâng cấp ngay!" thay vì chuyển sang màu xám, quảng cáo sẽ tốt hơn cho sản phẩm và nhận được điểm.

Nếu người dùng quản trị đang xem nó, rõ ràng họ sẽ thấy rằng tùy chọn tài chính có màu xám, với một mẹo công cụ giải thích lý do.

Tôi không biết đầy đủ bối cảnh của vấn đề của bạn, thậm chí có thể không có sản phẩm liên quan. Nhưng dựa trên những gì tôi hiểu, đó là phản ứng của tôi với nó.

1
user708

Windows UXGuide có khá nhiều tài nguyên có thể giúp bạn quyết định xem có hiển thị lỗi hay ngăn chặn đầu vào không hợp lệ hay không. Cụ thể có một phần mà đưa ra tuyên bố dưới đây về ui.

Không đưa ra thông báo lỗi khi người dùng không có khả năng thực hiện một hành động hoặc thay đổi hành vi của họ là kết quả của thông báo. Nếu không có hành động nào người dùng có thể thực hiện hoặc nếu sự cố không đáng kể, hãy chặn thông báo lỗi.

Ngoài ra cuộc thảo luận này nhắc nhở tôi một chút về những gì Karl Shifflett trong bài đăng trên blog có tiêu đề "Đối tượng kinh doanh của Fort Knox (có/không)" khi ông cân nhắc những ưu và nhược điểm của việc có cho phép các đối tượng kinh doanh tham gia không trạng thái không hợp lệ hay không và cách quyết định này ảnh hưởng đến tương tác của người dùng.

Cá nhân, tôi có xu hướng ngăn người dùng thực hiện các mục nhập không hợp lệ hoặc vô hiệu hóa các điều khiển thực hiện các hành động như nút hầu hết thời gian nhưng đối với một số điều khiển liên quan đến nhập văn bản phức tạp, tôi có xu hướng hiển thị các cảnh báo nội tuyến ít gây khó chịu hơn các hộp thông báo nhưng vẫn nhận được các điểm trên.

0
jpierson

Làm cả hai: Phần cuối và giao diện người dùng

Điều này thực sự không nên là một trong hai hoặc tình huống. Các câu trả lời khác liệt kê các lý do tốt được liệt kê để hiển thị các tùy chọn không có sẵn và lý do chính đáng để không hiển thị chúng. Nhưng điều này là, dù bằng cách nào, bạn cần xử lý nó đúng cách trên phần phụ trợ. Bạn vẫn cần kiểm tra chính xác đầu vào và quyền của người dùng, ngay cả khi bạn nghĩ rằng đầu vào duy nhất họ có thể cung cấp là đúng.

Điều này hoàn toàn đúng với bất kỳ ứng dụng dựa trên web nào, nơi người dùng có thể kích hoạt một cách giả tạo điều khiển/tùy chọn/đầu vào bị vô hiệu hóa. Đừng để Firebird sử dụng khả năng của ứng dụng để kiểm soát những gì tôi có thể làm. Và trong trường hợp họ cố gắng sử dụng một tùy chọn không có sẵn, hãy đảm bảo bạn đăng nhập sự kiện.

0
Jeffrey Blake