摘要:
最近遇到一個用戶希望實現如下功能,如果用戶屬于所有者組,則在某個列表的新建和編輯畫面里可以編輯某些字段,如果用戶不屬于所有者組則只允許只讀這些字段。用戶使用Shared Hosting Environment,只能通過客戶端進行開發。
方案:
首先我們假設您已經知道如何通過Designer修改NewForm.aspx以及EditForm.aspx畫面,隱藏掉默認的列表項編輯Web Part,并添加新的列表項編輯Web Part,了解如何在添加的Web Part里操控字段。
這些您都完成后我們僅僅以默認的Title字段為例,只需要調用<xsl:if test="ddwrt:IfHasRights(33554432)">即可判斷用戶的身份以判斷是否顯示該字段,IfHasRights里給出的參數叫做PermissionMark,我們隨后會給出所有的參考值。
<xsl:if test="ddwrt:IfHasRights(33554432)"> <td width="75%" class="ms-vb"> <SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="New" FieldName="Title" __designer:bind="{ddwrt:DataBind('i',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}" /> <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit" /> </td> </xsl:if>
以上只提到了核心的內容,還有些瑣碎的工作還需要做:
1. XSL里面怎么書寫Else語句(應該是使用<xsl:choose>)
2. 不屬于所有者組的時候顯示該字段值(應該是使用<xsl:value-of select="$Title">)
還有些有意思的事情可以調查:
1. 如何從JavaScript里面將變量傳給XSL的變量(如此我們還可以考慮比較復雜的方案,譬如通過WebService返回用戶所屬的組信息后再進行判斷)
以下是所有可以使用的PermissionMask:
ViewListItems - 1
AddListItems - 2
EditListItems - 4
DeleteListItems - 8
ApproveItems - 16
OpenItems - 32
ViewVersions - 64
DeleteVersions - 128
CancelCheckout - 256
PersonalViews - 512
ManageLists - 2048
ViewFormPages - 4096
Open - 65536
ViewPages - 131072
AddAndCustomizePages - 262144
ApplyThemeAndBorder - 524288
ApplyStyleSheets - 1048576
ViewUsageData - 2097152
CreateSSCSite - 4194314
ManageSubwebs - 8388608
CreateGroups - 16777216
ManagePermissions - 33554432
BrowseDirectories - 67108864
BrowseUserInfo - 134217728
AddDelPrivateWebParts - 268435456
UpdatePersonalWebParts - 536870912
ManageWeb - 1073741824
UseRemoteAPIs - 137438953472
ManageAlerts - 274877906944
CreateAlerts - 549755813888
EditMyUserInfo - 1099511627776
EnumeratePermissions - 4611686018427387904
FullMask - 9223372036854775807
不含病毒。www.avast.com |
留言列表