2013-10-28 49 views
0

我寫了下面的方法來存儲用戶名登錄用途: -與Active Directory用戶名比較User.Identity.Name.Substring將返回錯誤結果

if (ModelState.IsValid) 
       { 
string ADusername = User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1); 
repository.InsertOrUpdateTechnologyAssociation(ua, ADusername); 
repository.Save(); 
//code hoes here 
       } 

以上將存儲的用戶名管理員作爲「管理員」全部小寫。而如果我從Active Directory檢索如下的用戶名: -

public List<DomainContext> GetADUsers(string term=null) 
     { 
      List<DomainContext> results = new List<DomainContext>(); 
      using (var context = new PrincipalContext(ContextType.Domain, "WIN-SPDEV")) 
      using (var searcher = new PrincipalSearcher(new UserPrincipal(context))) 
      { 
       var searchResults = searcher.FindAll(); 



       foreach (Principal p in searchResults) 
       { 
        if (term == null || p.SamAccountName.ToString().ToUpper().StartsWith(term.ToUpper())) 
        { 
        DomainContext dc = new DomainContext(); 
        dc.DisplayName = p.DisplayName; 
        dc.UserPrincipalName = p.UserPrincipalName; 
        dc.Name = p.Name; 
        dc.SamAccountName = p.SamAccountName ; 
        dc.DistinguishedName =  p.DistinguishedName; 

        results.Add(dc); 

       } 
       } 
      } 
      return results; 
     } 

然後名稱& SAM帳戶將是「管理員」與大寫字母A在乞討。因此,當我嘗試將登錄用戶與活動目錄上的用戶名進行比較時,在應用程序內部導致問題,因此管理員!=管理員結果始終爲false。因此,要解決這個問題,我寫我的比較如下改變這兩個值要低的情況下,然後對它們進行比較: -

bool isadminByuser = tms.SecurityRoles.Where(a => a.Name == "Administrator").SingleOrDefault().SecurityRoleUsers.Any(a => a.UserName.ToLower() == user.ToLower()); 

也是如此,今後這樣的比較引起的問題,或者它是安全的suername改變小寫。? 或管理員&管理員可以代表兩個不同的用戶? 謝謝

+1

嘗試比較字符串時使用此過載。它清楚地表明瞭你期望的比較結果,並減少了所有ToUpper /噪音。 http://msdn.microsoft.com/en-us/library/c64xh8f9(v=vs.100).aspx – StingyJack

回答

2

Active Directory用戶名不區分大小寫。所以基本上Administratoradministrator代表完全相同的帳戶。

+0

所以我的比較應該沒問題? –

+1

在這種情況下,我會傾向使用相應的string.Equals超載來支持文化不變的小寫或大寫比較。 –