SPSecurity.RunWithElevatedPrivileges 的未授权异常?

Unauthorized exception with SPSecurity.RunWithElevatedPrivileges?

我正在通过以下代码检查给定用户是否属于某个组。我得到

unauthorized exception (0x80070005)

我不明白为什么?我正在使用 SPSecurity.RunWithElevatedPrivileges,为什么它给我这个例外!?有人给我提示吗?提前致谢!

public bool IsUserInGroup(SPWeb web, string groupName, string user)
{
    try
    {
        bool returnValue = false;
        SPSecurity.RunWithElevatedPrivileges(() =>
        {
            if (web.Groups.OfType<SPGroup>().Where(g => g.Name == groupName).Count() > 0)
            {
                SPGroup spGroup = web.Groups[groupName];
                if (spGroup.Users.OfType<SPUser>().Where(u => u.LoginName.Equals(user)).Count() > 0)
                {
                    returnValue = true;
                }
                else
                {
                    returnValue = false;
                }
            }
            else
            {
                returnValue = false;
            }
        });
        return returnValue;
    }
    catch (Exception exp)
    {
        Classes.Logs.Error.Log_Error("IsUserInGroup", "DocumentCenterItem.cs", exp.Message, DateTime.Now);
        return false;
    }
}

您需要在提升的权限内创建 SP Web 的新实例。在您当前的实现中,您正在重用在当前用户上下文中运行的 web 对象。

因此,请尝试根据您的要求修改以下代码:

public bool IsUserInGroup(SPWeb web, string groupName, string user)
{
    try
    {
        bool returnValue = false;
        SPSecurity.RunWithElevatedPrivileges(() =>
        {       
            using(SPSite site = new SPSite(web.Site.ID))
            {
                using(SPWeb elevatedWeb = site.OpenWeb(web.ID))
                {
                    if (elevatedWeb.Groups.OfType<SPGroup>().Where(g => g.Name == groupName).Count() > 0)
                    {
                        SPGroup spGroup = elevatedWeb.Groups[groupName];
                        if (spGroup.Users.OfType<SPUser>().Where(u => u.LoginName.Equals(user)).Count() > 0)
                        {
                            returnValue = true;
                        }
                        else
                        {
                            returnValue = false;
                        }
                    }
                    else
                    {
                        returnValue = false;
                    }               
                }               
            }
        });
        return returnValue;
    }
    catch (Exception exp)
    {
        Classes.Logs.Error.Log_Error("IsUserInGroup", "DocumentCenterItem.cs", exp.Message, DateTime.Now);
        return false;
    }
}