今天做个小功能时,遇到个小问题。当用户在listA下添加一个item时,要对另外一个listB里的数据进行更新,而该用户对于listB只有读取权限,怎么办呢
于是翻书看看了,才发现原来MOSS有中模拟管理员权限的方法〔SPSecurity.RunWithElevatedPrivileges(delegate())},这样一来问题就解决了

 1MOSS模拟管理员权限public override void ItemAdded(SPItemEventProperties properties)
 2        }

SPSecurity.RunWithElevatedPrivileges(delegate()
{
// implementation details omitted
});

可以提升代码的运行权限,实现模拟管理员身份的功能。

在RunWithElevatedPrivileges中不要使用SPContext.Current.Web,SPContext.Current.Site,SPControl.GetContextWeb(HttpContext.Current)之类的根据当前上下文得到当前的Web或者Site,根据这些方法得到的所有对象(包括从根据这些对象得到的List,ListItem等等对象)都是以当前网站登录用户权限运作的,即使是在RunWithElevatedPrivileges其运作权限也不会是管理员。

所以,如果要真正让在RunWithElevatedPrivileges中的代码以管理员权限正常运作的话,必须重新初始化相应的对象,比如:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite mySite = new SPSite(SPContext.Current.Site.Url))
{
Response.Write(mySite.RootWeb.CurrentUser.LoginName);
}
});
以上mySite.RootWeb.CurrentUser.LoginName返回的是管理员的登录帐号。
但是如果按之前所说使用SPContext:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
Response.Write(SPContext.Current.Web.CurrentUser.LoginName);
});

这时候即使在提升权限的范围内运行,得到的也是当前网站登录帐户名,而不是管理员登录帐号

MOSS模拟管理员权限public class DemoHandler : SPItemEventReceiver //继承SharePoint数据条目事件监控类

相关文章:

  • 2021-11-05
  • 2022-12-23
  • 2021-11-30
  • 2021-05-10
  • 2021-11-20
  • 2022-01-16
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-02
  • 2022-12-23
  • 2021-12-24
  • 2022-02-11
相关资源
相似解决方案