fcghr 发表于 2015-9-29 07:02:58

SharePoint 如何根据用户权限在NewForm页面允许用户编辑某字段或者只读某字段

  摘要:
  最近遇到一个用户希望实现如下功能,如果用户属于所有者组,则在某个列表的新建和编辑画面里可以编辑某些字段,如果用户不属于所有者组则只允许只读这些字段。用户使用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
页: [1]
查看完整版本: SharePoint 如何根据用户权限在NewForm页面允许用户编辑某字段或者只读某字段