使用FBA在控制台应用程序中运行RunWithElevatedPrivileges的奇怪行为

时间:2010-04-29 09:05:45

标签: sharepoint

  1. 我有一个名为FBA的网站集,我使用的是ActiveDirectoryMembershipProvider。
  2. 我们有一个服务器场管理员域\ administrator。他不是明确的网站集管理员。
  3. 我创建了一个在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关闭时,我也不例外。

1 个答案:

答案 0 :(得分:0)

RunWithElevatedPrivileges运行具有应用程序池运行的用户权限的代码。它可以是管理员以外的人。你确定你在RunWithElevatedPrivileges得到了相同的结果吗?

无论如何,更好的是,more reliable way of elevating privileges是在SPSite构造函数中传递系统用户用户令牌。试试吧。