Я понял это по-другому ( мой пост для serverfault ):
Итак. Решение следующее: (не чисто, но работает)
1) написать собственный IHttpModule, содержащий:
class LoginModule {
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(UglyHack);
}
void UglyHack(object sender, EventArgs e)
{
HttpCookie wannabe = (HttpContext.Current.Request.Cookies["_sp_admin_wanna_be_user"]);
if (wannabe != null && SPContext.Current.Web.CurrentUser.IsSiteAdmin)
{
SPWeb cw = SPContext.Current.Web;
typeof(SPWeb).GetField("m_CurrentUser", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(
SPContext.Current.Web,
cw.AllUsers[wannabe.Value]);
}
}
}
2) Подпишите
3) GAC это
4)
to web.config ().
Вуаля! Ты мужчина. :) (конечно, я добавил логику, чтобы добавить настройки cookie в меню, безопасность и т. д.)