将应用程序中的角色转换为groupid

时间:2013-12-11 11:06:58

标签: asp.net asp.net-mvc-4 windows-authentication claims

在我正在开发的ASP.NET项目中,我有一些管理员在数据库中设置的角色。我必须通过用户主要声明来比较这些角色。

目前我正在将所有GroupSID转换为相应的名称:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, IdentityType.Sid, sid);

if (_roleNames.Exists(r => string.CompareOrdinal(r, group.SamAccountName) == 0))
{
    groupName = group.SamAccountName;
    return true;
}

_roleNames是包含角色的字符串列表。

_roleNames.Add("Read");
_roleNames.Add("Edit");
_roleNames.Add("Review");
_roleNames.Add("Publish");

问题是这个过程很慢。校长来自Active Directory并且有很多声明。

有没有办法将我的应用中的roleNames 转换为GroupSID,这样我基本上可以跳过将GroupSID转换为其名称的过程?

伪代码:

list<string> roleSidList

foreach role in roleList
   roleSidList.add(role.ConvertToSid())

foreach claim in Principal.Claims
   if(roleSidList.Exists(r => r == claim)) 
      // role exists, do something with it

1 个答案:

答案 0 :(得分:1)

解决了我的问题如下:

而不是将SID传递给GroupPrincipal我只是像这样传递groupName:

public bool IsUserInGroup(string groupName)
{
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
    GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName);

    if (group == null)
        return false;

    return true;
}