2010-09-23 15 views
5

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.

+4

Somebody bir zamanlar düşündü: "32 chars herhangi bir rol için yeterli" –

+0

@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

cevap

7

Denemeden ve hatadan sonra, neler olduğunu anladım. Bir grup Active Directory oluşturulur

, bu iki isim verilir:

WindowsPrincipal IsInRole denir Windows 2000 öncesi grup adı kullandığı gibi görünüyor

alt text

.

Kapsamlı arama yaptıktan sonra, bunun hiçbir yerde belgelenmemiş gibi görünmektedir. Elime en yakın olan this speculative answer, SO'da da benzer bir soruydu. Benim durumumda


, ben etki alanında karşı sorgulama edildi grupları uzun adı vardı, ama kesik Windows 2000 öncesi adı (nedense 32 karaktere kısaltıldı). Uzun adla geçmek yanlış grup adına karşı kontrol ettiği için çalışmaz.