我寫了下面的方法來存儲用戶名登錄用途: -與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改變小寫。? 或管理員&管理員可以代表兩個不同的用戶? 謝謝
嘗試比較字符串時使用此過載。它清楚地表明瞭你期望的比較結果,並減少了所有ToUpper /噪音。 http://msdn.microsoft.com/en-us/library/c64xh8f9(v=vs.100).aspx – StingyJack