使用非Web应用程序中的ASP.NET角色提供程序(计时器作业)检查角色成员身份

时间:2011-07-01 21:19:59

标签: asp.net sharepoint asp.net-membership web-parts roleprovider

我在SharePoint Web部件中使用此代码,用于检查用户是否在角色中(对于基于表单的经过身份验证的网站)。

foreach (string role in System.Web.Security.Roles.GetAllRoles())
  foreach (string user in System.Web.Security.Roles.GetUsersInRole(role))

然后我比较角色中现有用户的用户名,以及我试图授权的用户名(作为字符串)。只要为Web应用程序设置了角色提供程序,它就可以正常工作。

但是,我还有一个计时器作业,用于处理发送到smtp服务器的传入电子邮件,并在本地中继到smtp drop文件夹(C:\inetpub\mailroot\drop)。然后,计时器作业从drop文件夹中读取电子邮件,并对其进行解析/处理。为了识别发送电子邮件的用户,我使用“来自地址”并对sharepoint站点进行查找以使用SPUtility获取用户的身份。

但是,我需要检查用户是否处于该网站的FBA角色提供程序指定的角色中。角色提供程序详细信息是黑盒子,未知并且可以在运行时更改,因此我必须使用角色提供程序内置功能,即。 Roles.GetAllRolesRoles.GetUsersInRole(x)。 (我不能直接去数据库或其他幕后数据源)。但我知道我需要从作业计时器授权用户的网站地址。

但是,作业计时器无法访问System.Web.Security.Roles.GetAllRoles(),因为它不是asp.net Web应用程序(实际上是OWSTIMER.exe Windows服务的一部分)。

那么,我如何从作业计时器中检查“登录名”是否是角色的成员?

注意:也可以要求完全退出SharePoint,并假设我想从Windows服务或WinForms应用程序中检查“登录名”。我基本上需要检查用户是否处于FBA角色(在asp.net 2.0-3.5 Web应用程序的web.config设置中指定的RoleProvider),来自不是定义和访问角色提供者的Windows应用程序的源。

此外,我无法使用Web服务,因为目标只是拥有SharePoint Web部件和SharePoint作业计时器。

1 个答案:

答案 0 :(得分:2)

您没有指定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(有趣的部分是'警报'主题)