Использование поставщика ролей ASP.NET из не веб-приложения (задание таймера) для проверки принадлежности к роли - PullRequest
2 голосов
/ 02 июля 2011

Я использую этот код в веб-части 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.

1 Ответ

2 голосов
/ 02 июля 2011

Вы не указываете свою версию SharePoint, поэтому я предполагаю, что вы говорите о SharePoint 2007 здесь.Однако тот же принцип применим к SharePoint 2010.

Файл OWSTIMER.exe хранится в 12hive \ bin.Вы можете создать файл OWSTIMER.exe.config в той же папке и зарегистрировать свою роль и поставщиков членства в этом файле так же, как вы делали бы это в файле web.config.

Например, возьмемпосмотрите на эту статью http://msdn.microsoft.com/en-us/library/bb977430(v=office.12).aspx (интересная часть в теме 'оповещения')

...