我们正在使用sharepoint 2007以编程方式创建SPAlert时访问被拒绝错误
我们创建了以编程方式创建警报的自定义页面。
我们面临的问题是,如果登录的用户是网站集管理员,那么只有电子邮件被触发。
网站集管理员以外的用户拥有完全控制权或访问权限的网站,他们将获得访问被拒绝错误。
我们尝试使用SPSecurity.RunWithElevatedPrivileges,但在这种情况下,Access Denied错误也越来越多。
对于下面的代码,我们没有得到拒绝访问错误,但在这种情况下,电子邮件没有得到触发,
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);
}
}
});
请让我知道什么是该解决方案或者我们如何可以添加/删除用户网站集合管理员在运行时以编程方式运行
您可能会看到是否需要oWeb.AllowUnsafeUpdates。这取决于您在//代码中创建警报的情况。 – buck 2012-08-08 16:25:57
嗨,降压,我更新了创建警报代码的问题 感谢您花时间了解问题 – Rushikesh 2012-08-09 08:11:12
其中一个问题是您的oUser变量。由于您在设置时处于提升的权限块内部,因此oUser是您的应用程序池帐户,而不是当前登录的用户。也许尝试移动声明并将其分配到使用语句之上。这可能是唯一的问题 - 警报正在成功创建,但它是针对错误的帐户,因此该帐户没有收到电子邮件。如果所有这些都在事件接收器中,则可以使用以下代码行来获取实际用户:SPUser user = oWeb.Users.GetByID(properties.CurrentUserId); – buck 2012-08-09 22:10:27