Kullanıcıların yetkilendirmesine dayanan bir uygulama var. Bunun içinde, ben kullanıcıların doğru gruplar halinde olup olmadığını kontrol etmek IPrincipal.IsInRole()
kullanıyorum: anapara bir WindowsPrincipal
örneğidir iseIPrincipal.IsInRole() yalnızca rol adlarını kırptığımda çalışır - neden?
IPrincipal principal = Thread.CurrentPrincipal;
bool inRole = principal.IsInRole("mydomainname\some role with a long name");
Bu çoğunlukla iyi çalışır, ancak başarısız olur (hatalı bir sonuç döndürür).
IPrincipal principal = Thread.CurrentPrincipal; // <- returns a WindowsPrincipal
bool inRole = principal.IsInRole("mydomainname\some role with a lo");
sonra rol adı kesiliyor: I (alan adı ve \
dahil) ben 32 karakter uzunluğunda olmasını ben geçmek rolün adını kesmek zorunda düzgün çalışması için bulduk doğru çalışıyor. Niye ya? Bu bir hata/özellik/belgelenmiş bir sorun mu? Win2000 alan adlarıyla ilişkili olabileceğine dair bir işaretim var, ancak üzerinde herhangi bir bilgi bulunamıyor.
Bazı ekstra bilgi: Bu uygulama, yetkilendirme bir arayüz destekleyen herhangi yetkilendirme sağlayıcısı olma ("özel" için aktif dizin veya "özel" ya da kullanmak için yapılandırılabilir çünkü bir sorun
olduğunu - SQL olabilir tabanlı, dosya tabanlı, vb ..). Özel yapılandırıldığında, rollerin büyük olasılıkla kırpmaya ihtiyacı yoktur ve bu nedenle kodumdaki bu özel durumla uğraşmak istemem. Ayrıca, grup üyelikleri aramak için System.DirectoryServices.AccountManagement
ad alanında sınıfları kullanan uygulamanın başka bir bölümüne sahibim. Bu, tam rol adı gerektirir ve kesilmişlerse çalışmaz.
Somebody bir zamanlar düşündü: "32 chars herhangi bir rol için yeterli" –
@Henk: Ben bunu seviyorum :) 32 karakterleri, 'Int32', 'Win32' için birçok isabet aldığınız için arama yapmak oldukça zor hale getirir , vb... – adrianbanks