通常在實際的專案需求上,SharePoint Ribbon上的功能並不是全部都開放給全部的使用者可以操作,有時候因為不同權限的關係,或是公司內部ERP上的整合,甚至企業HR人事的架構不同,都希望可以每個不同的使用者進來瀏覽SharePoint 之後,可以有不同的Ribbon可以操作。
但是預設SharePoint Ribbon是統一開放給使用者,因此若是想要根據不同的使用者權限檢視不同的Ribbon功能項的話,那麼該如何來設計了?以下為實作:
1. 因為每一個Page的Ribbon控管可能都不同,因此這邊使用WebPart放置到頁面來啟用此效果,先建立一個視覺化的網頁組件:
2. 先來看一下http://sharepoint/default.aspx瀏覽的畫面,在Ribbon的部分如下圖所示,一般的使用者若是沒有特別的控管,那麼可以檢視以下的「編輯」和「管理」的功能:
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可得到以下的畫面:
5. 使用NETDB\Adams登入http://sharepoint/default.aspx,點選頁面的Ribbon可得到以下的畫面:
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結構如下(這邊只擷取部分畫面):
沒有留言:
張貼留言