Странное поведение RunWithElevatedPrivileges в консольной аппликации с FBA - PullRequest
0 голосов
/ 29 апреля 2010
  1. У меня есть именованное семейство сайтов, где включен FBA, и я использую ActiveDirectoryMembershipProvider.
  2. У нас есть администратор фермы домен \ администратор. Он не является администратором собрания сайтов.

Я создал образец консольного приложения, которое запускаю под учетной записью домена \ администратора. В коде что-то вроде этого:

                    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();
                        }
                    }

Вывод консоли - домен \ администратор, однако я становлюсь исключением AccessDenied, когда пытаюсь добавить пользователя в группу. Однако, когда я запускаю это с RunWithElevetadPrivileges (который, согласно всем прочитанным сообщениям, не должен иметь влияния в консольном приложении) и устанавливаю AllowUnsafeUpdates = true (та же история), код проходит гладко, исключение не выдается, и пользователь добавляется в группу , Интересно то, что пользователь, который записывается в вывод консоли, все еще является доменом \ администратором.

Итак, мой вопрос: WTF? Есть ли способ лучше? Почему это происходит? У кого-нибудь уже была эта проблема? Должен ли я использовать другого membershipprovider?

Небольшая подсказка: когда FBA выключена, я не становлюсь исключением.

1 Ответ

0 голосов
/ 29 апреля 2010

RunWithElevatedPrivileges запускает код с разрешениями пользователя, который запускает пул приложений. Это может быть не Администратор. Вы уверены, что получите тот же результат с RunWithElevatedPrivileges?

В любом случае, лучший, более надежный способ повышения привилегий - передать системным пользователям маркер пользователя в конструкторе SPSite. Попробуй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...