2015年5月20日 星期三

Different User Can View Different Ribbon in SharePoint(SharePoint 根據不同的使用者權限檢視不同的Ribbon功能項)

通常在實際的專案需求上,SharePoint Ribbon上的功能並不是全部都開放給全部的使用者可以操作,有時候因為不同權限的關係,或是公司內部ERP上的整合,甚至企業HR人事的架構不同,都希望可以每個不同的使用者進來瀏覽SharePoint 之後,可以有不同的Ribbon可以操作。

但是預設SharePoint Ribbon是統一開放給使用者,因此若是想要根據不同的使用者權限檢視不同的Ribbon功能項的話,那麼該如何來設計了?以下為實作:

1. 因為每一個Page的Ribbon控管可能都不同,因此這邊使用WebPart放置到頁面來啟用此效果,先建立一個視覺化的網頁組件:

clip_image001

2. 先來看一下http://sharepoint/default.aspx瀏覽的畫面,在Ribbon的部分如下圖所示,一般的使用者若是沒有特別的控管,那麼可以檢視以下的「編輯」和「管理」的功能:

clip_image003

3. 在RibbonWebPartUserControl.ascx.cs的Page_Load加入以下程式碼,透過SPRibbon取得目前的Ribbon物件之後,再透過叫用TrimById的方法將某些Ribbon控制項隱藏:

protected void Page_Load(object sender, EventArgs e)
{
    SPRibbon currentRibbon = SPRibbon.GetCurrent(this.Page);
    if (currentRibbon != null)
    {
      
        if (SPContext.Current.Web.CurrentUser.Name.ToLower() ==
          "netdb\\administrator")
        {
            currentRibbon.TrimById("Ribbon.WebPartPage.Edit");
        }
        else if (SPContext.Current.Web.CurrentUser.Name.ToLower() ==
         "netdb\\adams")
        {
            currentRibbon.TrimById("Ribbon.WebPartPage.Manage");
        }
    }
}

4. 使用NETDB\Administrator登入http://sharepoint/default.aspx,點選頁面的Ribbon可得到以下的畫面:

clip_image004

5. 使用NETDB\Adams登入http://sharepoint/default.aspx,點選頁面的Ribbon可得到以下的畫面:

clip_image005

6. 比較第2步驟、第4步驟和第5步驟的畫面,可以得知根據不同的使用者在Ribbon控制項的功能會跟隨著異動,而有不同的顯示。

最後,那麼在程式碼中SPRibbon的TrimById(“xxx”)方法中的參數到底要放哪一個值?這個才是重點,其實要放的值為Ribbon上那個控制項的ClientID,這些ID有非常的多,主要的依據要參考以下文件:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\GLOBAL\XML\CMDUI.XML中的定義,大概的XML結構如下(這邊只擷取部分畫面):

clip_image007

沒有留言: