我创建了一个在domain \ administrator帐户下运行的示例控制台应用程序。 在代码中是这样的:
using (SPSite site = new SPSite(serverUrl))
{
using (SPWeb web = site.OpenWeb())
{
Console.WriteLine(web.CurrentUser.LoginName);
Console.WriteLine(WindowsIdentity.GetCurrent().Name);
string userName = "domain\\testuser";
SPUser spUser = web.EnsureUser(userName);
SPGroup group = web.SiteGroups["GroupName"];
group.AddUser(spUser);
group.Update();
}
}
控制台输出是domain \ administrator但是当我尝试将用户添加到组时,我变成了AccessDenied异常。 然而,当我使用RunWithElevetadPrivileges运行它时(根据我阅读的所有帖子应该对控制台应用程序没有影响)并设置AllowUnsafeUpdates = true(相同的故事)代码顺利通过,没有异常抛出并且用户被添加到组。有趣的是,写入控制台输出的用户仍然是域\ administrator。
所以我的问题是:WTF?有没有更好的办法?为什么会这样?有人有这个问题吗?我应该使用其他成员吗?
小提示:当FBA关闭时,我也不例外。
答案 0 :(得分:0)
RunWithElevatedPrivileges运行具有应用程序池运行的用户权限的代码。它可以是管理员以外的人。你确定你在RunWithElevatedPrivileges得到了相同的结果吗?
无论如何,更好的是,more reliable way of elevating privileges是在SPSite构造函数中传递系统用户用户令牌。试试吧。