zoukankan      html  css  js  c++  java
  • WSS 代码执行的权限提升

    本文部分摘自:http://www.cnblogs.com/llbofchina/archive/2008/05/24/1206393.html

    概述:

    WSS 默认使用身份模拟执行代码,也就是说用当前登录的用户身份执行Web Part或者自定义应用程序的代码访问。在大多数情况下,这种机制能够准确并严格地控制了标准权限的用户他对特定网站资源和敏感数据的访问,这也是我们想要达到的目标。

    然而,有时候在一些特殊的场景,你的代码必须执行wss 对象某些受限制的方法,即便请求者是没有这个权限的用户。那么在这种情况下,我们需要提升普通用户执行代码的权限。

    实现方法:

    SPSecurity.RunWithElevatedPrivileges(delegate()

    {

        // 需要提升权限执行的代码

    });

    事例:

    获取网站集owner 的 名称 SPSite.Owner.Name

    默认是需要网站集管理员权限的用户才能得到,如果没有执行代码权限提升,以一个普通用户去执行SPSite.Owner.Name,系统会报一个”拒绝访问”的错误。

    然而执行了如下代码,我们普通权限的用户,也可以成功得访问到SPSite.Owner.Name

    SPSite siteColl = SPContext.Current.Site;

    SPWeb site = SPContext.Current.Web;

    SPSecurity.RunWithElevatedPrivileges(delegate() {

    using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID)) {

    using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

    {

            //以SHAREPOINT"System account 系统帐号身份运行

          string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

        }

    }

    });

    注意:

    在使用SPSecurity.RunWithElevatedPrivileges权限提升的代码里头,必须实例化SPSite,SPWeb对象,而不能使用Microsoft.SharePoint.SPContext.Current属性获得对象,因为那些对象是以当前用户的安全上下文创建的

    请使用using方式实例化对象,以便系统能自动执行Dispose,完成资源释放。

    上面谈到的这种方式是以最高完全权限的系统管理员帐户去执行代码的,当然我们也可以指定运行代码的帐号:

    SPSite siteColl = SPContext.Current.Site;

    SPWeb site = SPContext.Current.Web;

    SPUser user = site.Users[@"Thinker\chenxizhang"];

    SPUserToken userToken = user.UserToken;

    SPSecurity.RunWithElevatedPrivileges(delegate() {

    using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID, userToken)) {

    using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

    {        //以litware"ken身份运行
          string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

        }

    }

    });

    这种方式的话,代码就以Thinker\chenxizhang的权限来运行,不管Thinker\chenxizhang的权限是高还是低。

     

     

    补充一下:

    有些朋友将经常需要对ListItem进行的操作封装了起来UpdateWithElevatedPrivileges,如下

            void UpdateWithElevatedPrivileges()
            {
                 SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite site = new SPSite(SPContext.Current.Site.ID))
                        {
                            using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
                            {
                                web.AllowUnsafeUpdates = true;

                                SPList list = web.Lists[ this.ListId ];

                                SPListItem item = list.GetItemById(this.ItemId);

                                if (item == null) return;

                                item[this.FieldName] = this.ItemFieldValue;

                                item.SystemUpdate();
                            }
                        }
                    }
                    );
            }

  • 相关阅读:
    Comprehend-Elasticsearch-Demo5
    Mxnet使用TensorRT加速模型--Mxnet官方例子
    Mxnet模型转换ONNX,再用tensorrt执行前向运算
    MxNet模型转换Onnx
    基于Flask-APScheduler实现添加动态定时任务
    Golang习题
    算法题
    Celery使用指南
    flask拓展(数据库操作)
    flask进阶(上下文源管理源码浅析)
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1598337.html
Copyright © 2011-2022 走看看