2011-07-27 9 views
10

Aşağıdakileri içeren bir örnek bulabilirim?Active Directory'deki Kullanıcı/Grup İzinleri

  1. Bir kullanıcıyı Active Directory'den çeker.
  2. Kullanıcının üyesi olduğu grupları alır.
  3. Her bir gruba atanan izinlerin listesini alır.

Bu basit bir görev gibi görünüyor ama bir çözüm bulamıyorum. Genel hedef, özel izinler atamak ve bunları bir uygulama içindeki hakları kontrol etmek için kullanmaktır.

+0

hangi dilde? – TheGeekYouNeed

+0

.NET/C# içinde Active Directory API'ları kullanıyorum. – user802165

cevap

13

.NET 3.5 ve üstündeyseniz, System.DirectoryServices.AccountManagement (S.DS.AM) ad alanını gözden geçirmelisiniz. Hepsi burada! okuyunuz:

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find a user 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 

if(user != null) 
{ 
    // do something here....  
} 

// find the group in question 
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); 

// if found.... 
if (group != null) 
{ 
    // iterate over members 
    foreach (Principal p in group.GetMembers()) 
    { 
     Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName); 
     // do whatever you need to do to those members 
    } 
} 

: MSDN docs on System.DirectoryServices.AccountManagement

Temelde

  • Managing Directory Security Principals in the .NET Framework 3.5
  • , sen AD kullanıcıları ve/veya grupları bulmak kolay etki alanı bağlamını tanımlayabilir ve Yeni S.DS.AM, AD'deki kullanıcılarla ve gruplarla oynamayı gerçekten çok kolaylaştırıyor!

    Son nokta: izinler. Bunlar Active Directory'de saklanmaz - bu nedenle, herhangi bir AD kodundan bunları alamazsınız.

    İzinler, tek tek dosya sistemi öğelerinde, ör. dosyalar ve/veya dizinler - veya diğer nesneler (kayıt defteri anahtarları vb. gibi). Bir AD grubunuz veya kullanıcı hesabınız varsa, SID (Güvenlik Tanımlayıcısı) özelliğini, SID'nin tüm Windows üzerinde ACL'de (Erişim Kontrol Listeleri) görüneceğini okuyabilirsiniz, ancak kullanıcı veya gruptan, herkesin alacağı bir mekanizma yoktur. Makine/sunucuda herhangi bir yere sahip olabileceği izinler.

    Dosya ve dizin izinleri örn.

    FileInfo info = new FileInfo(@"D:\test.txt"); 
    FileSecurity fs = info.GetAccessControl(); 
    
    DirectoryInfo dir = new DirectoryInfo(@"D:\test\"); 
    DirectorySecurity ds = dir.GetAccessControl(); 
    

    deşifre ve bunların yapım duygusu tamamen bambaşka bir hikaye: FileInfo ve DirectoryInfo sınıflarında .GetAccessControl() yöntemi kullanılarak alınacak!

+0

Bu benim şüphemdi. Yardımın için teşekkürler. – user802165