我们正在使用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);
}
}
});
请告诉我这是什么解决方案,或者我们如何在运行时以编程方式向网站集管理员添加/删除用户
答案 0 :(得分:0)
将声明和作业移到using语句之上。我认为成功创建了一个警报,但这是因为错误的帐户,因此您没有收到电子邮件。如果所有这些都在事件接收器中,您可以使用此行来获取实际用户:
SPUser user = oWeb.Users.GetByID(properties.CurrentUserId);
答案 1 :(得分: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);
}
}
});