我编写了以下方法来存储用户名以用于日志目的:-
if (ModelState.IsValid)
{
string ADusername = User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1);
repository.InsertOrUpdateTechnologyAssociation(ua, ADusername);
repository.Save();
//code hoes here
}
以上会将管理员的用户名存储为“administrator”,全部小写。如果我从活动目录中检索用户名,如下所示:-
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;
}
然后 Name & SamAccountName 将是“Administrator”,大写 A。所以这在我的应用程序内部引起了问题,因为当我尝试将登录用户与活动目录上的用户名进行比较时,结果总是错误的,因为管理员!=管理员。因此,为了解决这个问题,我通过将两个值更改为小写然后比较它们来编写我的比较如下:-
bool isadminByuser = tms.SecurityRoles.Where(a => a.Name == "Administrator").SingleOrDefault().SecurityRoleUsers.Any(a => a.UserName.ToLower() == user.ToLower());
那么这样的比较是否会在将来引起问题,或者将 suername 更改为小写是安全的。?或者管理员和管理员可以代表两个不同的用户??谢谢