<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    探索與發現

    研究java技術

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      83 隨筆 :: 0 文章 :: 109 評論 :: 0 Trackbacks
    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);
    });

    這時候即使在提升權限的范圍內運行,得到的也是當前網站登錄帳戶名,而不是管理員登錄帳號

    public class DemoHandler : SPItemEventReceiver //繼承SharePoint數據條目事件監控類
    {
        
    public override void ItemAdded(SPItemEventProperties properties)  //重載ItemAdded函數,監控新建列表條目事件
        {
             SPSecurity.RunWithElevatedPrivileges(
    delegate()      //用此方法模擬管理員賬戶運行此事件處理程序
            {
                
    using (SPSite site = new SPSite(properties.SiteId))    //用此方法的話就不用dispose()了
                {
                    
    using (SPWeb web = site.OpenWeb(properties.OpenWeb().ID))  //注意獲得web的方法!!!
                    {
                        
    try
                        
    {
                             SPList list
    = web.Lists[properties.ListId];     //獲得觸發事件的列表
                             SPListItem item = list.Items.GetItemById(properties.ListItemId);    //獲得觸發事件的列表條目

                            
    if (!item.HasUniqueRoleAssignments) item.BreakRoleInheritance(false);   //將此條目取消權限繼承,如果是“false”,則將去除所有權限,只保留系統賬戶,如果是“true”,則將上一級權限復制過來。
                             SPUser user = web.Users.GetByID(properties.CurrentUserId);    //獲得觸發此事件的用戶

                             SPRoleAssignment ra
    = new SPRoleAssignment(web.EnsureUser(user.LoginName));   //生成一個新的角色分配
                             ra.RoleDefinitionBindings.Add(web.RoleDefinitions["讀取"]);    //將此角色分配綁定“讀取”權限級別
                             item.RoleAssignments.Add(ra);     //將此新權限綁定到列表條目上
                         }

                        
    catch (Exception ee)
                        
    {
                         }

                     }


                  }

             }

             );
         }

    }

    posted on 2009-05-13 07:37 蜘蛛 閱讀(879) 評論(1)  編輯  收藏 所屬分類: 日常瑣事

    評論

    # re: 提升代碼的運行權限,實現模擬管理員身份的功能 2009-05-13 07:38 蜘蛛
    給Web添加用戶權限
    SPSite site = new SPSite("http://siteurl");
    SPWeb web = site.RootWeb;
    SPUser user = web.AllUsers["domain\\userloginname"];
    SPRoleDefinition role = web.RoleDefinitions["Full Control"]; //或者Contribute,Design,Read
    SPRoleAssignment assignment = new SPRoleAssignment(user);
    assignment.RoleDefinitionBindings.Add(role);
    web.RoleAssignments.Add(assignment);

    給List
    list.RoleAssignments.Add(assignment);

    給Item
    item.RoleAssignments.Add(assignment);  回復  更多評論
      

    主站蜘蛛池模板: 国产精品免费看久久久| 免费人成动漫在线播放r18| 99精品免费观看| 亚洲av日韩av天堂影片精品| 巨胸喷奶水www永久免费| 亚洲片国产一区一级在线观看 | 日批日出水久久亚洲精品tv| 亚洲精品无码久久久久牙蜜区| 四虎永久在线精品免费网址 | 午夜影视日本亚洲欧洲精品一区 | 久久久精品视频免费观看 | 亚洲综合无码AV一区二区| 国产免费一区二区三区免费视频| 国产亚洲成人在线播放va| 中文字幕在线视频免费| 亚洲va久久久噜噜噜久久天堂| 日本xxxx色视频在线观看免费| 亚洲天堂中文字幕在线观看| 国产精品成人免费视频网站京东| 亚洲欧美日韩国产精品一区| 免费看国产一级片| 三年在线观看免费观看完整版中文| 婷婷精品国产亚洲AV麻豆不片| 国产免费的野战视频| 亚洲精品国产av成拍色拍| 免费真实播放国产乱子伦| 中文字幕乱理片免费完整的| 久久亚洲国产成人精品性色| 国产h视频在线观看免费| 国产精品亚洲а∨天堂2021| 久久精品国产亚洲沈樵| 免费福利视频导航| 国产成人综合亚洲| 亚洲VA中文字幕无码一二三区| 无遮免费网站在线入口| 日本一区二区在线免费观看 | 亚洲中文字幕无码av永久| 亚洲高清无码综合性爱视频| 国产精品免费AV片在线观看| 亚洲一本一道一区二区三区| 在线亚洲97se亚洲综合在线|