VisualStudio 开发 WebPart 之代码权限提升

MOSS 环境下的代码默认是以当前访问用户的身份运行的,如果用户没有某个资源的访问权限,而代码中却调用了这个资源,那么页面就会禁止用户访问,为了避免这个问题,可以采用权限提升,强制代码以系统账号的身份运行。

权限提升的代码块:

SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        //实例化新的站点集对象
        using(SPSite elevatedsitecoll = new SPSite(SPContext.Current.Site.ID))
        {
            using(SPWeb elevatedWeb = elevatedsiteColl.OpenWeb(SPContext.Current.Web.ID))
            {
                //此处是以系统账号身份运行的代码
                SPList list = elevatedWeb.Lists["通知"];
                list.Items[0].Delete();
            }
        }
    }
);
  

最近一个项目中遇到一个问题就是关于提升权限的。某一个列表,各种不同权限的用户都可以对它进行更新。在这个列表中有一个番号,每次添加内容时,就取最大的番号 +1,但是因为不同的用户只能看到自己权限下的记录内容,所以代码中取到的最大番号是自己权限下所能看到的最大番号。这样番号就设定得不正确了。像这种情况就必须采用权限提升来新建或者更新数据。

另外还有一个注意点,权限提升需要实例化新的 SPSite 类和 SPWeb 类,不能直接调用上下文对象 (SPContext),上下文对象始终会以当前用户身份运行。