Я использую этот код в веб-части SharePoint, которая проверяет, есть ли пользователь в роли (для сайтов с проверкой подлинности на основе форм).
foreach (string role in System.Web.Security.Roles.GetAllRoles())
foreach (string user in System.Web.Security.Roles.GetUsersInRole(role))
Затем я сравниваю имена пользователей для существующих пользователей в роли и имя пользователя (в виде строки), который я пытаюсь авторизовать. И, как и ожидалось, работает нормально, пока поставщик ролей настроен для веб-приложения.
Однако у меня также есть задание таймера, которое используется для обработки входящих сообщений электронной почты, отправляемых на сервер smtp и локально ретранслируемых в папку сброса smtp (C:\inetpub\mailroot\drop
). Затем задание таймера читает электронную почту из папки размещения и анализирует / обрабатывает ее. Чтобы идентифицировать пользователя, отправляющего электронное письмо, я беру «с адреса» и просматриваю сайт sharepoint, чтобы получить идентификацию пользователя с помощью SPUtility.
Но мне нужно проверить, выполняет ли пользователь роль, указанную поставщиком ролей FBA на этом веб-сайте. Сведения о поставщике ролей: черный ящик, неизвестны и могут быть изменены во время выполнения, поэтому я должен использовать встроенную функциональность поставщика ролей, т.е. Roles.GetAllRoles
, Roles.GetUsersInRole(x)
. (Я не могу перейти непосредственно к базе данных или другим скрытым источникам данных). Однако я знаю адрес веб-сайта, на который мне нужно авторизовать пользователя, из таймера задания.
Но System.Web.Security.Roles.GetAllRoles()
недоступен для таймера задания, поскольку он не является веб-приложением asp.net (фактически является частью службы Windows OWSTIMER.exe).
Итак, как я могу проверить, является ли «логин» членом роли из таймера задания?
ПРИМЕЧАНИЕ. Этот вопрос можно также задать, не используя SharePoint, и при условии, что я хочу проверить «имя пользователя» из службы Windows или приложения WinForms. Мне в основном нужно проверить, находится ли пользователь в роли FBA (RoleProvider, указанный в настройках web.config веб-приложения asp.net 2.0-3.5), из источника, который не является приложением Windows, в котором определен и доступен поставщик ролей.
Кроме того, я не могу использовать веб-службу, поскольку цель состоит в том, чтобы иметь только веб-часть SharePoint и таймер задания SharePoint.