Вместо того, чтобы отлавливать «неавторизованное» событие в вашем коде, я предлагаю вам использовать нестандартные ошибки. Когда пользователь перенаправляется на страницу «Отказано в доступе», SharePoint фактически выдает ошибку с кодом ошибки «401» (для неавторизованных).
В вашем файле web.config вы можете настроить поведение вашего приложения для ошибок 401. Если вы когда-либо создавали пользовательскую страницу с ошибкой в веб-приложении, это то же самое. Найдите узел CustomError в вашем файле web.config и измените его следующим образом:
<customErrors mode="On" defaultRedirect="~/_layouts/CustomErrorPage.aspx">
<error statusCode="401" redirect="~/_layouts/AccessDeniedPage.aspx" />
</customErrors>
Затем создайте свой CustomErrorPage.aspx и свой AccessDeniedPage.aspx и разверните их в кусте 12.
В коде этих страниц вы можете переопределить событие PageLoad, чтобы перенаправить их туда, куда вы хотите:
protected void Page_Load(object sender, EventArgs e)
{
bool isLogged = HttpContext.Current.User.Identity.IsAuthenticated;
Response.Redirect("wherever");
}
Обратите внимание, что в этот момент у вас все еще будет доступ к объекту SPContext, если он вам нужен (и я предполагаю, что вы захотите написать определенный код в зависимости от членства в группе пользователя).
Это не специфическое поведение SharePoint. Все приложения ASP.NET работают таким образом. Использование конфигурации для всего сайта позволит вам запускать код только тогда, когда он должен быть запущен (то есть, когда доступ запрещен) вместо проверки разрешений при каждой загрузке страницы или что-то в этом роде.