zoukankan      html  css  js  c++  java
  • Sharepoint 2010 禁止用户在文档库的第一级(根)目录上传文件

    首先,什么叫文档库的第一级(根)目录。当我们打开文档库时,然后就点击Ribbon中的"上载单个文件",此时就是在第一级目录的上传文件。我要做的就是禁止用户在这里上传文档,只允许新建文件夹。看下图,图片20100-12-02 151718就是在第一级目录

    我首先想到的方法是,根据用户是否在文档库第一级目录来隐藏Ribbon中的"上载单个文件"及"新建文档"命令项(可参考http://blog.csdn.net/sygwin_net/article/details/6789973)。这样得到的结果是,用户打开文档库时(在第一级目录时),也就看不到这两项命令了。可这样并未完全控制住。因为我只是禁止在第一级目录上传或新建文件,在非第一级目录还是要用户上传文件的,此时用户可以在上传文档窗口,更改上传文件的位置,如下图(选择文件夹按钮):

    下面我就想用事件接收器的ItemAdding来控制。思路很简单,用户上传文件时,判断上传文件的路径是否在第一级目录即可。代码如下:

    public override void ItemAdding(SPItemEventProperties properties)
    {
    base.ItemAdding(properties);
    if (properties.BeforeUrl == properties.AfterUrl && properties.BeforeUrl.IndexOf("/") == properties.BeforeUrl.LastIndexOf("/"))
    {
    properties.Cancel = true;
    properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
    properties.RedirectUrl = "/_layouts/error.aspx?ErrorText="+Microsoft.SharePoint.Utilities.SPEncode.UrlEncode("禁止在根目录上传文件!");
    }
    }

    说明:在ItemAdding事件里,此时文档还未上传到库里,所以properties的BeforeProperties,AfterProperties及ListItem均为null。也就不能用了。

    而对于BeforeUrl和AfterUrl属性,它有以下特点:

    如果上传文档,不管在哪级目录下,两者相等,比如均为:DocLib/2011-12-02_154248.jpg。
    如果新建文件夹,不管在哪级目录下,BeforeUrl均为空,而AfterUrl则是文件夹的路径,比如:DocLib/aa

    这样根据properties.BeforeUrl == properties.AfterUrl判断用户是上传文件还是新建文件夹;
    根据properties.BeforeUrl.IndexOf("/") == properties.BeforeUrl.LastIndexOf("/")判断用户是否在第一级目录里上传文件。因为在第一级目录上传文件BeforeUrl的值,类似为:DocLib/2011-12-02_154248.jpg
    在第二级目录上传文件BeforeUrl的值,类似为:DocLib/test/2011-12-02_154248.jpg
    这样根据"/"的索引位置就可以判断是否在第一级目录里上传文件。

    参考:http://sharepointserved.blogspot.com/2011/05/to-prevent-users-from-creating-folders.html

  • 相关阅读:
    django-restframework使用
    django-xadmin使用
    python2.7.5升级到2.7.14或者直接升级到3.6.4
    mysql-5.7.25安装以及使用
    django1.9安装以及使用
    Algorithm negotiation failed
    ELK的搭建以及使用
    python 3.5 成功安装 scrapy 的步骤
    pandas基础-Python3
    C#命名规则和编码规范
  • 原文地址:https://www.cnblogs.com/sygwin/p/2279182.html
Copyright © 2011-2022 走看看