有哪些不错的方法可以防止用户创建会议工作区?

时间:2020-03-06 14:34:35  来源:igfitidea点击:

我在共享点中有一个事件列表,需要禁止用户使用新事件表单创建会议工作区。不愿意自定义新的事件表单(这会破坏附件支持),怎么办?

解决方案

默认情况下,为了使用户创建会议工作区,他们将需要是管理员或者站点所有者(特别是需要"创建站点"权限)。如果我们不授予他们此权限,则他们将无法创建会议工作区。

这将禁止用户在设置了这些权限的站点下创建任何站点。我不知道一种限制对特定网站定义的访问的方法,但是仍然允许用户创建一个不同的网站。

我认为没有支持的方式来执行此操作。一种选择是在C:\ Program Files \ Common Files \ Microsoft Shared \ Web服务器扩展\ 12 \ TEMPLATE \ 1033 \ XML \ WEBTEMP.XML中编辑WEBTEMP.XML文件(当然首先要进行备份)。注释掉以下几行:

<!-- <Template Name="MPS" ID="2">
    ...    
    </Template> -->

编辑此文件并在服务器场中的每个服务器上执行IISRESET之后,我们将不再能够创建会议工作区。

如果我们可以在母版页中添加一些javascript,我想到了这个小技巧。

它确实有一些缺点,因为MS可能会发布以下修补程序或者Service Pack:

  • 更改"使用会议工作区来组织此事件的与会者,议程,文档,会议记录和其他详细信息"复选框的名称,以使名称中不再包含字符串" 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的文本。