我们目前正在开展一个涉及 sharepoint 的项目。我们创建了一个模板网站,其中包含我们希望在每次创建新网站时复制的特定内容。我们已经设置了一个在 Web 部件中运行的创建 Web 用户控件。这将从模板创建 Web,设置必要的权限并添加一些功能。
问题:
我们希望为启用电子邮件的安全组 DOMAIN\sharepoint 设置警报。我们正在使用这个 VB.Net 代码:
Dim user As SPUser = w.EnsureUser("DOMAIN\sharepoint")
Dim alert As SPAlert = w.Alerts.Add()
alert.User = user
alert.AlertType = SPAlertType.List
alert.List = w.Lists("Information")
alert.Title = w.Title & " - " & alert.Title
alert.Properties("eventtypeindex") = "2"
alert.AlertFrequency = SPAlertFrequency.Daily
alert.Update(False)
这适用于作为域管理员的用户,但不适用于仅在此站点级别具有完全控制权的用户。但是,一旦创建了站点,他们就可以进入并手动添加警报。使用我自己的登录名创建它时我没有任何问题,但我是域管理员的成员,因此是所有共享点站点的管理员。对该站点具有完全控制权的用户只会得到的错误是拒绝访问错误。
编辑:我从来没有真正说出我想要什么。我想知道是否有办法规避这种情况,或者我是否可以创建某种事件接收器,以便在创建 Web 本身时添加警报。
编辑2:
我已将代码更改为以下内容,现在出现错误
Dim authorizedCode As SPSecurity.CodeToRunElevated = New SPSecurity.CodeToRunElevated(AddressOf AddAlert)
SPSecurity.RunWithElevatedPrivileges(authorizedCode)
Dim new_site As New SPSite(SPContext.Current.Site.ID, sysToken)
Dim web As SPWeb = new_site.AllWebs(w.ID)
Dim user As SPUser = web.EnsureUser("DOMAIN\sharepoint")
Dim alert As SPAlert = web.Alerts.Add()
alert.User = user
alert.AlertType = SPAlertType.List
alert.List = web.Lists("Information")
alert.Title = web.Title & " - " & alert.Title
alert.Properties("eventtypeindex") = "2"
alert.AlertFrequency = SPAlertFrequency.Daily
alert.Update(False)
在哪里sysToken
获得
Public Sub AddAlert()
Dim lolcatKiller As SPSite = New SPSite(SPContext.Current.Site.ID)
sysToken = lolcatKiller.SystemAccount.UserToken
End Sub
但我得到了例外
System.Runtime.InteropServices.COMException: The security validation for this page is invalid.
据我所知,我仍在系统用户的上下文中
确实有规避。用RunWithElevatedPrivileges包装代码。
对于该异常使用: web.AllowUnsafeUpdates = true;
对于 SP2010,我可以通过确保占位符“PlaceholderFormDigest”不在隐藏的占位符部分内来修复它
这些需要在页面中并且可以工作: