我在 sharepoint 中有一个事件列表,需要禁止用户在新事件表单中创建会议工作区。羞于自定义新的事件表单(这会破坏附件支持),如何做到这一点?
4 回答
默认情况下,为了让用户创建会议工作区,他们需要是管理员或站点所有者(特别是他们需要“创建站点”权限)。如果您不授予他们此权限,他们将无法创建会议工作区。
这将禁止用户在设置了这些权限的站点下创建任何站点。我不知道有一种方法可以限制对特定站点定义的访问,但仍允许用户创建不同的站点定义。
我认为没有支持的方式来做到这一点。一种选择是编辑 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\XML\WEBTEMP.XML 中的 WEBTEMP.XML 文件(当然要先备份)。注释掉这些行,如下所示:
<!-- <Template Name="MPS" ID="2">
...
</Template> -->
编辑此文件并在场中的每台服务器上执行 IISRESET 后,您应该无法再创建会议工作区。
如果您可以在母版页中添加一些 javascript,我想出了这个小技巧。
它确实有几个缺点,因为 MS 可能会发布一个修补程序或服务包:
更改“使用会议工作区组织此事件的与会者、议程、文档、会议记录和其他详细信息”复选框的名称,使得名称中不再包含字符串“CrossProjectLinkField”,或者...
他们可以在某些其他 OOTB 标记上的某些其他输入元素的名称中使用相同的字符串
在梯形图的情况下(我现在不完全确定这是错误的),如果它们正在运行运行此脚本的母版页,这些输入将被禁用。
但这是我可以应对的风险。每当您依赖由其他人控制的客户端 ID 和名称时,您就会面临这些风险。
<script type="text/javascript">
var anchors = document.getElementsByTagName('input');
for(var i=0;i<anchors.length;i++)
{
var anchorName = anchors[i].name.match('CrossProjectLinkField');
if(anchorName != null)
{
anchors[i].disabled = true;
break;
}
}
</script>
这样做是找到允许用户创建会议工作区的复选框并将其禁用,以便他们无法检查它。问题解决了!
使用功能接收器创建一个 Web 范围的功能,该功能接收器会删除激活该功能的当前 Web,并让它抛出一个 SPException,说明无法使用该模板。然后创建一个 Web 应用程序或场范围的功能订书机,将以前的功能装订到您要阻止的站点定义。在 Web 应用程序或场上激活该功能。然后,当有人从其中一个站点定义创建站点时,该站点将被删除,并且用户将看到一个错误页面,其中显示了引发的 SPException 的文本。