1

我们正在使用sharepoint 2007

我们创建了用于以编程方式创建警报的自定义页面。

我们面临的问题是,如果登录用户是网站集管理员,那么只会触发电子邮件。

除网站集管理员外,对网站具有完全控制或贡献访问权限的用户收到拒绝访问错误。

我们尝试使用 SPSecurity.RunWithElevatedPrivileges 但在这种情况下也出现访问被拒绝错误。

对于下面的代码,我们没有收到拒绝访问错误,但在这种情况下,电子邮件没有被触发,

SPSecurity.RunWithElevatedPrivileges(delegate()
{
Guid siteId = SPContext.Current.Site.ID;
Guid webId = SPContext.Current.Web.ID;
using (SPSite oSite = new SPSite(siteId))
{
using (SPWeb oWeb = oSite.OpenWeb(webId))
{
oWeb.AllowUnsafeUpdates = true; 
SPUser oUser = oWeb.CurrentUser;
SPUser user = oWeb.EnsureUser(oUser.ToString());
SPList oList = oWeb.Lists[strLibraryName];
SPAlert oAlert = user.Alerts.Add();
oAlert.Filter ="<Eq><FieldRef Name="+strCol+"><Value type='Text'>" + strColValue + "</Value></Eq>";
oAlert.Title = "test alert";
oAlert.AlertType = SPAlertType.List; 
oAlert.EventType = SPEventType.All; 
oAlert.List = oList;
oAlert.AlertFrequency = SPAlertFrequency.Immediate;
oAlert.AlwaysNotify = true;
oAlert.Update(true);
}
}
});

请让我知道对此的解决方案是什么,或者我们如何在运行时以编程方式将用户添加/删除到网站集管理员

4

2 回答 2

0

将声明和赋值向上移动到 using 语句之上。我认为警报已成功创建,但它是针对错误帐户的,因此您没有收到电子邮件。如果所有这些都在事件接收器中,您可以使用此行来获取实际用户:

SPUser user = oWeb.Users.GetByID(properties.CurrentUserId);
于 2012-08-10T15:11:40.477 回答
0

问题在于 EnsureUser() 方法,因此将其删除并在下面发布工作代码..

SPSecurity.RunWithElevatedPrivileges(delegate()
{
Guid siteId = SPContext.Current.Site.ID;
Guid webId = SPContext.Current.Web.ID;
using (SPSite oSite = new SPSite(siteId))
{
using (SPWeb oWeb = oSite.OpenWeb(webId))
{
oWeb.AllowUnsafeUpdates = true; 
SPUser oUser = oWeb.CurrentUser;
SPList oList = oWeb.Lists[strLibraryName];
SPAlert oAlert = oUser.Alerts.Add();
oAlert.Filter ="<Eq><FieldRef Name="+strCol+"><Value type='Text'>" + strColValue + "</Value></Eq>";
oAlert.Title = "test alert";
oAlert.AlertType = SPAlertType.List; 
oAlert.EventType = SPEventType.All; 
oAlert.List = oList;
oAlert.AlertFrequency = SPAlertFrequency.Immediate;
oAlert.AlwaysNotify = true;
oAlert.Update(true);
}
}
});
于 2012-08-14T12:51:27.293 回答