基于用户组控制新/编辑表单字段(行)的显示与隐藏
当然可以实现!你提到的在新/编辑表单中根据用户所属特定成员组限制可见内容的需求,完全可以通过SharePoint的XSLT扩展函数来实现,而且比依赖权限判断的ddwrt:IfHasRights更精准贴合你的场景。
核心方法:使用ddwrt:UserIsInGroup函数
SharePoint的DataView Runtime(ddwrt)命名空间提供了UserIsInGroup函数,专门用于判断当前登录用户是否属于指定的成员组,完美解决你需要针对特定组做内容限制的需求。
具体代码示例
1. 单组判断
如果只想让「市场部成员组」的用户看到某个字段,可以这么写:
<xsl:if test="ddwrt:UserIsInGroup('市场部成员组')"> <!-- 这里放置仅该组成员可见的表单内容,比如字段编辑区域 --> <tr> <td width="190px" valign="top" class="ms-formlabel"> <h3 class="ms-standardheader"> <nobr>市场专属字段</nobr> </h3> </td> <td width="400px" valign="top" class="ms-formbody"> <SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="MarketExclusiveField" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@MarketExclusiveField')}"/> <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="MarketExclusiveField" ControlMode="Edit"/> </td> </tr> </xsl:if>
2. 多组逻辑判断
- 或关系:用户属于组A或组B即可看到内容
<xsl:if test="ddwrt:UserIsInGroup('组A') or ddwrt:UserIsInGroup('组B')"> <!-- 可见内容 --> </xsl:if>
- 且关系:用户同时属于组A和组B才能看到内容
<xsl:if test="ddwrt:UserIsInGroup('组A') and ddwrt:UserIsInGroup('组B')"> <!-- 可见内容 --> </xsl:if>
优化建议:使用组ID替代组名称
如果担心组名称后续被修改导致判断失效,建议用组的ID来替代名称,这样更稳定。组ID可以通过以下方式获取:
- 进入站点设置 → 网站权限
- 点击目标成员组,查看地址栏中的
GroupID=xxx,xxx就是组的ID
使用组ID的示例:
<xsl:if test="ddwrt:UserIsInGroup(100)"> <!-- 可见内容 --> </xsl:if>
注意事项
- 确保你的XSLT文件中已经引用了ddwrt命名空间,默认的SharePoint表单XSLT里已经包含了这行:
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" - 这个函数仅对当前登录用户生效,是基于用户的组归属判断,和权限设置无关,刚好匹配你「多组权限相似但需仅对特定部分组限制」的需求。
内容的提问来源于stack exchange,提问作者thelos999
相关产品推荐
相关产品推荐

