web-gelistirme-sc.com

Yasak bir eylemi önlemek veya bir hata / açıklama mesajı görüntülemek daha mı iyi?

Birden fazla örnek var, bu yüzden soruyu odaklamak için belirli bir tane seçeceğim.

Bir kullanıcının belirli özelliklere (veya izinlere) sahip olabileceğini varsayalım:
Yönetici, Sanal, Harici, Finansal vb.

İşleri karmaşıklaştırmak için kullanıcıların farklı lisansları da vardır - Premium, Regular, Limited, vb.

Muhtemelen bunun nereye gittiğini görebilirsiniz:
Diyelim ki sınırlı lisansa sahip bir kullanıcı Yönetici olamaz veya mali izinleri olamaz.

Olasılıklar:

  • Yönetici profiline gider, diyelim Zack ve finansal izinlere sahip olamayacağını görüyoruz.
    Sorun, yöneticinin neden olduğu açık değil (lisans bilgisi ve izinler aynı yerde görüntülenmiyor ve öyle olsalar bile, yöneticinin sistem kuralının farkında olması gerekecekti. "sınırlı kullanıcılar için finansal izin yok")
  • Yönetici tüm izinleri (onay kutuları ile uygulandığını varsayalım) etkin ve yalnızca tıklandığında işlemin neden reddedildiğini bildiren bir hata mesajı alır.
    Şimdi sebebi açık, ama yönetici bunu bulmak için bir tıklamayı "harcamak" zorunda kaldı.

Hem eylemi önlemenin hem de nedenini açıklamanın bir yolu var mı? Araç ipucu ile devre dışı bırakılmış bir kontrol işe yarar mı? Daha iyi bir fikrin var mı?

Diğer örneklerden kısaca bahsetmek gerekirse - diyelim ki etkileşimli bir grafiğiniz var ve grafikteki noktaların çoğunu hareket ettirebilirsiniz, ancak bazılarının sabit olması gerekir. Hareket ettirilemeyeceklerini belirtmek için farklı şekilde çizebilirsiniz (nedenini açıklamadan) veya kullanıcının sürükleyip daha sonra bir hata mesajı göstermesine izin verebilirsiniz.

27
Dan Barak

Uygulamaya bağlı olarak, genellikle bir kullanıcının erişemediği sayfaların bölümlerini görüntülemem. Diğer kullanıcıların haklarını değiştiren kullanıcılarınız var gibi görünüyor, bu nedenle bu yöntem çalışmayabilir. Devre dışı bırakılmış bir girdi öğesini her görüntülediğinizde bir hata mesajı görüntülemenizi tavsiye ederim. Kullanıcılar yapmayı bekledikleri bir eylemi gerçekleştiremediklerinde hayal kırıklığına uğrayabilirler. Sadece devre dışı bırakılmışsa, muhtemelen nedenini anlamayacaklar ve sadece programa çıkaracaklar. Aynı şekilde, mesajın mümkün olduğunca basit ve noktaya geldiğinden emin olmak istersiniz. Uzun hata mesajları genellikle yok sayılır.

12
LoganGoesPlaces

Kullanıcının erişemediği bir özellik için kullanıcı arayüzünün bir bölümünü tamamen gizlemeden önce şunları göz önünde bulundurun:

  1. Kullanıcı bu özelliği bilecek mi?
  2. Bunun için avlanmak için çok zaman harcayacaklar mı?
  3. Neden mevcut olmadığını öğrenebilmeleri için bir araç ipucu veya başka bir gösterge ile birlikte bir çeşit "devre dışı" durumunda saklamak daha iyi olur mu?

İşte basit bir örnek. Uygulamanızın yazdırma seçeneği içerdiğini varsayalım. Kullanılabilir yazıcı olmadığında, yazdırma menüsü komutunu tamamen gizlemeniz gerekir mi? Kullanıcı tüm menülerde gezinirken ve son olarak "yazdır" komutunu bulmaya çalışan teknik destek ekibinizle iletişim kurarken bu durum karışıklığa ve zaman kaybına neden olur mu? Teknik destek ekibiniz bu kullanıcının "yazdır" komutunu görmediğini bile anlayacak mı? Örneğin yazıcı takılıysa ancak güç tasarrufu için kendini kapatmışsa istenmeyen yan etkiler olur mu?

Genel bir kural olarak, birçok durumda, özellikle bir seçeneğin bazen mevcut olduğu durumlarda, kullanıcılara en iyi şekilde devre dışı bırakılmış bir seçenek veya hatta seçeneğin NEDEN olmadığını açıklayan bir hata mesajı getiren etkin bir seçenek tarafından sunulduğuna inanıyorum şu anda kullanılabilir.

35
Joel Spolsky

İki farklı yaklaşım görüyorum.

Eğer eylemler devre dışı bırakıldıysa güvenlik Aslında mümkünse bunları kaldırmayı denerdim. Menü öğeleri veya çoğu araç çubuğu düğmesi ile kolay.

Yazılımın daha ucuz bir sürümüne sahip olduğunuz için eylemler devre dışı bırakılırsa, bunları mevcut tutarım, ancak devre dışı bırakırım. Bu, kullanıcının "daha fazla ödeme yaptıysanız buna sahip olabileceğinizi" bilmesini sağlarken, kaldırıldıysa ne kaçırdıklarını bilemez. Kullanıcı gerçekten eylem yapmaya çalışmadan bir eylem yapıp yapamayacağını anlayamadığından "lisans nedeniyle bunu yapamazsınız" açılır penceresini görüyorum.

8
shemnon

Başka bir yaklaşım, eylemi hiç göstermemektir.

Stack Exchange bunun iyi bir örneğidir. Başkalarının gönderileri için "düzenleme" haklarına sahip değilsem, bir "düzenle" bağlantısı görmüyorum hiç. Bu, tıklamaya çalışmam ve neden işe yaramadığını merak etmem anlamına geliyor.

Bu her koşulda işe yaramayabilir, ancak örneğinizde "yönetici" ve "finansal" seçenekler/bağlantılar sınırlı kullanıcılar için görünmez - bu kullanıcıların yönetici ekranlarında bile. Kullanıcı "Normal" veya "Premium" bir kullanıcı olarak değiştirildiyse, bu seçenekler/bağlantılar görünür.

Ardından, yöneticinin belirli seçeneklerin/bağlantıların neden görünmediğini hatırlatması için kullanıcı türünü yarı belirgin bir yerde görüntülemeyi düşünebilirsiniz!

7
ChrisF

Diğer yanıtların belirttiği gibi, kullanıcının sistem içinde bir eylem gerçekleştirme izni yoksa (olduğu gibi, düzenleme/yönetici ayrıcalıkları yok), eylem hiç görüntülenmemelidir.

Uygulama durumu nedeniyle eylemlerin devre dışı bırakıldığı durumlarda (salt okunur bir dosyayı düzenleyemez, seçili metin yoksa kopyalayamaz/yapıştıramazsa, kullanıcının birkaç özellikten yoksun bir yazılım deneme sürümü vardır) eylemin şu anda gerçekleştirilemediğini gösteren görsel bir göstergeyle görüntüleniyor olmalıdır. Ben "devre dışı" demiyorum unutmayın, çünkü eğer kullanıcı dener bu eylem, neden yapılamaz olduğunu bulmak mümkün olmalıdır. Bu şekilde bir kullanıcı eylemin devre dışı olduğunu görebilir, ancak bunun nedenini açıklayan bir mesaj da alabilir.

Bir kullanıcının özellikleri olmayan bir uygulamanın deneme/lisanssız sürümüne sahip olması durumunda dikkatli olurum. Örneğin, ödeme yapmadığınız sürece CD'leri kopyalamayacak bir ISO okuma/yazma uygulamanız varsa, "CD'yi kopyala" seçeneğini gösterebilir, ancak kullanıcının bunu gerçekleştirmesine izin veremezsiniz. Ancak uygulamanızın üst düzey sürümlerinde (örneğin görsel stüdyo) tüm süitlere sahipse, tüm bunları görüntüleme ancak izin vermeme kullanıcı için sinir bozucu olabilir. IDE ve veritabanımı, ağ oluşturma, tümleşik UML, test, profilleme, vb. Paketlerimi görmek istemiyorum. İçinde lisanslı olduğum her şeyin yazma ve inşa etme projeleri olduğunu biliyorum .

6
Carson Myers

Temel kuralım: Bir işlem, izinler nedeniyle bir kullanıcı tarafından kullanılamıyorsa, görünür değildir. Geçici bağlam nedeniyle bir eylem kullanılamıyorsa (bu 'Kaydet' düğmesinin, kullanıcı kaydedilecek bir şey girene kadar bir anlamı yoktur), devre dışı bırakılır.

"İzinler" hem "yönetici kullanıcı ile normal kullanıcı" hem de "premium lisans - cheapo lisans" ı kapsar. Kullanılamaz UI öğeleri karmaşıktır - ek özelliklerinizin reklamını yapmanın yolu değildir.

Birçok cevap bu doğru gibi görünüyor, sadece bunu Nielsen'in sezgisel taramalarından biriyle özetlemek istiyoruz, ki bu tam olarak bunu gösteriyor. Belirtir:

Hata önleme İyi hata mesajlarından bile daha iyisi, bir sorunun ilk etapta oluşmasını önleyen dikkatli bir tasarımdır. Hataya yatkın durumları ortadan kaldırın veya bunları kontrol edin ve eylemi gerçekleştirmeden önce kullanıcılara bir onay seçeneği sunun.

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

4
Nacho

Çok seviyorum shemnon's cevap. Ben onun ikinci dava genişletmek ve ign referanslı Nielsen komut uygulamak; Kullanıcının daha ucuz bir lisansı varsa, seçeneği devre dışı bırakır ve seçim nesnesini, seçeneğin devre dışı durumunu daha da düzleştiren bir simgeyle değiştiririm.

Gibi bir şey

  • O Seçenek 1
  • O Seçenek 2
  • alt text Seçenek 3
  • O Seçenek 4

Bu varsayım ürünü hala geliştirilmekte olduğundan, en azından aynı sayfaya kullanıcının lisans seviyesinin bir ifadesini de ekleyeceğim. Bu şekilde yönetici, kullanıcının lisans seviyesinin aynı zamanda yöneticinin söz konusu lisanstan doğrudan etkilenen sistem değişkenlerine baktığını görür.

Yazılımın güzelliği, tek yapmanız gereken bilgiyi aramak.

Düzenleme: Ayrıca, izinleri bireysel kullanıcılara değil rollere atanabilir bir rol merkezli izin düzeni istihdam edebilirsiniz. Bu genellikle bir ton ek yükün bireysel kullanıcı izinlerini mikromanyetik yönetme ihtiyacını azaltır.

  1. Yönetici rol düzenleme ekranını açar.
  2. Yönetici, rolün uygulanacağı en düşük lisans için bir radyo düğmesi seçebilir.
  3. Seçilen rol tarafından kullanılamayan izinler devre dışı bırakılır ve "x" düzenlenir.
  4. Yönetici kalan etkin seçeneklerden izinleri seçer.
  5. Daha sonra, kullanıcı yönetimi ekranında veya kullanıcı profilinde yönetici, kullanıcının lisansa göre sahip olabileceği rollerin listesini görür ve yönetici bir veya daha fazlasını seçer.
1
Matt

Genel olarak, temel kuralım şu şekilde gider (ve bunu kırmak için iyi bir nedene ihtiyacım var): Engelli bileşenin arkasındaki mantık bağlamdan akıyorsa veya bu anlayışın kullanıcı için başka bir nedenden dolayı kolay olması gerektiğini, sonra bloklama tercih edilen çözeltidir. Aksi halde, kullanıcı neden böyle olduğunu anlamaya çalışırken sinirli olabilir ve daha da kötüsü, bir dahaki sefere karşılaştığında bunun nedenini (onu anladığında) hatırlamayacaktır.

1
Assimiz

Özel sorunuza cevap vermek için, kullanıcıların tıklamadan önce sınırlamaları anlayabilmeleri için yeterli bilgi görüntülemek istiyorsunuz. Örneğinizde, lisanslarına sahip her kullanıcıyı, kontrolleri ile görsel olarak bağlı (ör. Yakınlık gibi) salt okunur bir alan olarak listelemelisiniz. izinleri. Veya lisans alanını izinler etiketi ile dinamik olarak birleştirebilirsiniz (ör. “İzinler (Sınırlı Lisans ile):”).

Geçerli olmayan izinler muhtemelen devre dışı bırakılmalı, etkinleştirilmemeli ve gizlenmemelidir. Dağınıklığa değerse, satır içi metin, fareyle üzerine gelindiğinde metin/araç ipuçları veya lisansın izin vermediği izinleri neden açıklayan bir bağlantı ekleyin (satır içi metin, izinleri listeliyorsa devre dışı denetimlerin yerini alabilir); örneğin “Yönetici , Sınırlı kullanıcılar için Finansa izin verilmez ”).

Genel kural, kullanıcı komutu etkinleştirmek için kullanıcı arayüzünde bir şey yapabilirse devre dışı bırakmayı kullanmaktır. Devre Dışı, “bu komutu yapabilirsiniz, ancak şu anda işlerin olduğu gibi değil” anlamına gelir. “İşlerin yolu” mevcut seçimi içerir. Devre dışı bırakmayı her kullandığınızda, kullanıcıların bazı nesneler için ilişkili komutların neden devre dışı bırakıldığını anlamaları için açık bir gösterge olmalıdır.

Etki alanının ortalama bilgisine sahip olduğunu varsayarak, kullanıcının devre dışı bırakma nedenini önceden belirtmek için bir yol yoksa devre dışı bırakmak yerine ileti kutularını kullanın. Engelli kontrolleri için ipuçları harika bir fikirdir, ancak her durumda tek başına yeterli olmayabilir.

Kullanıcı, kuruluştaki geçerli konumu göz önüne alındığında, kullanıcı arayüzünde ne yaparsa yapsın, komuta asla erişemezse gizlemeyi kullanın. Örneğin, izinleri verildiğinde kullanıcının yetkilendirmediği eylemler görünmez. Bu durum için devre dışı bırakma veya mesaj kutuları kullanmak karmaşık ve sinir bozucu. Kullanıcılar söz konusu olduğunda, haklarına sahip olmadıkları eylemler onların işi değildir (aksi takdirde erişimleri olacaktır) ve bu nedenle ilişkili denetimlerin kullanıcı arayüzlerinde bulunmaması gerekir. Dokümantasyon veya organizasyon prosedürü kılavuzları, kullanıcılara bu tür işlemlerin nasıl yapıldığını söyleyebilir (örn., "Süpervizörünüz sizin için yeni müşteri hesapları oluşturur" veya "Hesapları düzenlemek için Finansal izinlere ihtiyacınız vardır; izinlerinizi yükseltme onayını almak için prosedür için yöneticinize başvurun. “).

Denetimlerinizi Kontrol Etme adresindeki ayrıntılara sahibim.

1
Michael Zuschlag

Yukarıdaki bazı noktalar harika ve tekrarlamak istemiyorum, ama ...

Bu durumda, mevcut tüm seçeneklerin görünür olmasını sağlayacağım. Kurallarınızda geçerli olmayan seçenekler devre dışı bırakılmalıdır (gri renkte olmalıdır). Herhangi bir arabirimdeki bir kullanıcı için, bir şey grileşirse, bunun genellikle bir tür kural kümesi için geçerli olmadığı anlamına gelmesi yaygın bir bilgidir.

Bir alet ucu, devre dışı bırakılmış bir düğmeyle mükemmel bir şekilde çakışır. Yukarıdaki gibi lisanslar içeren bazı özel, daha gelişmiş durumlarda, uygun lisansa sahip olmayan kullanıcı daha yüksek lisans gerektiren bir alanı görüntülüyorsa, düğmenin sanatını tamamen "Şimdi Yükselt!" grileşmek yerine, ürün için daha iyi reklam ve nokta olsun.

Yönetici kullanıcı görüntülüyorsa, finansal seçeneğin gri olduğunu ve bunun nedenini açıklayan bir araç ipucunun olduğunu açıkça görüyorlardı.

Sorununuzun içeriğini tam olarak bilmiyorum, dahil olan bir ürün bile olmayabilir. Ama anladığım şeye dayanarak, bu benim tepkim.

1
user708

Windows UXGuide, hataların gösterilmesine veya geçersiz girişlerin önlenmesine karar vermenize yardımcı olabilecek oldukça fazla kaynağa sahiptir. Özellikle ui hakkında aşağıdaki ifadeyi yapan bir bölüm vardır.

Kullanıcılar mesajın sonucu olarak bir eylem gerçekleştirme veya davranışlarını değiştirme olasılığı düşük olduğunda hata mesajı vermeyin. Kullanıcıların yapabilecekleri bir işlem yoksa veya sorun önemli değilse hata mesajını bastırın.

Ayrıca bu tartışma bana Karl Shifflett'in iş nesnelerinin girmesine izin verip vermemenin artılarını ve eksilerini tarttığı blog yazısı "Fort Knox İş Nesneleri (evet/hayır)" başlıklı makalesinde neler olduğunu hatırlatıyor. geçersiz bir durum olup olmadığı ve bu kararın kullanıcı etkileşimini nasıl etkilediği.

Şahsen, bir kullanıcının geçersiz girişler yapmalarını veya çoğu zaman düğmeler gibi eylemleri gerçekleştiren kontrolleri devre dışı bırakma eğilimindeyim, ancak karmaşık metin girişini içeren bazı kontroller için mesaj kutularından daha az rahatsız edici olan ancak yine de elde edilen satır içi uyarıları gösterme eğilimindeyim karşıt nokta.

0
jpierson

İkisini de Yapın: Arka Uç ve Kullanıcı Arayüzü

Bu gerçekten bir durum ya da durum olmamalı. Diğer cevaplar, kullanılamayan seçenekleri göstermek için listelenen iyi nedenleri ve bunları göstermemek için iyi nedenleri listeler. Ama şey, her iki durumda da, arka uçta düzgün bir şekilde işlemeniz gerekiyor. Verebilecekleri tek girişin uygun olduğunu düşünseniz bile, kullanıcı girişlerini ve izinlerini düzgün bir şekilde kontrol etmeniz gerekir.

Bu, kullanıcının devre dışı bırakılmış bir kontrolü/seçeneği/girişi yapay olarak etkinleştirebileceği herhangi bir web tabanlı uygulama için iki kat doğrudur. Firebug kullanımının, uygulamanızın ne yapabileceğimi kontrol etme yeteneğini ortadan kaldırmasına izin vermeyin. Ayrıca, kullanılabilir olmaması gereken bir seçeneği kullanmaya çalıştıkları durumlarda, etkinliği günlüğe kaydettiğinizden emin olun.

0
Jeffrey Blake