2012-11-13 59 views
1
  1. 如何在強制使用某個自定義文檔狀態的情況下強制以只讀模式打開文件?例如,文檔可以經歷不同的階段:創建,審覈,批准。一旦獲得批准,沒有人可以修改它。用於.NET問題的WebDAV服務器引擎

  2. 如何通過WebDAV Server Engine for .NET API告訴客戶端某些操作不受支持,例如移動和複製文件。

回答

0

如果要禁止複製,並在所有的情況下移動操作,這樣來做:

public override void CopyTo(IItemCollection folder, string destName, bool deep, MultistatusException multistatus) 
{ 
    throw new DavException("Cannot copy resource", DavStatus.NOT_ALLOWED); 
} 

public override void MoveTo(IItemCollection folder, string destName, MultistatusException multistatus) 
{ 
    throw new DavException("Cannot move resource", DavStatus.NOT_ALLOWED); 
} 

如果你想禁止複製/移動/更改資源基礎上的一些情況,我我建議你使用自定義處理程序:

public Service(ILogger logger, bool isApplication) 
{ 
    ... 
    MyCustomPutHandler handler = new MyCustomPutHandler(); 
    handler.OriginalHandler = engine.RegisterMethodHandler("PUT", handler); 
} 

internal class MyCustomPutHandler : IMethodHandler 
{ 
    public IMethodHandler OriginalHandler { get; set; } 

    public void ProcessRequest(DavContextBase context, IHierarchyItem item) 
    { 
     if(<check condition>) 
     { 
      throw new DavException("Cannot change resource", DavStatus.Conflict); 
     } 
     if (item is IFolder) 
     { 
      ... 
     } 
     else 
     { 
      OriginalHandler.ProcessRequest(context, item); 
     } 
    } 
    ...... 
} 

希望這會幫助你。

0

「我怎麼知道,通過對.NET API WebDAV服務器引擎 某些操作不支持客戶端,例如移動和 複製文件。」

可以想像你可以刪除刪除複製並允許與公共頭部響應OPTIONS請求(見下面的例子)返回MOVE動詞。您需要致電:

engine.RegisterMethodHandler("COPY", null); 
engine.RegisterMethodHandler("MOVE", null); 

但是,根據我的經驗,Microsoft Miniredirector和Microsoft Office可能在此之後變得不可用。 Microsoft Office可能會以只讀方式打開文件。如果您需要支持MS Office和Miniredirector,我建議將所有動詞保留在允許和公共標題中。就像塔拉斯在他的回答中所建議的那樣,只要在CopyTo和MoveTo實施中拋出DavException。

選項請求的例子:

OPTIONS http://ajaxbrowser.com/Userb7d072f HTTP/1.1 
translate: f 
User-Agent: Microsoft-WebDAV-MiniRedir/6.0.6002 
Host: ajaxbrowser.com 
Content-Length: 0 
Connection: Keep-Alive 


HTTP/1.1 200 OK 
Allow: COPY, DELETE, GET, HEAD, LOCK, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, UNLOCK 
Content-Length: 0 
Accept-Ranges: bytes 
Server: Microsoft-HTTPAPI/1.0 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL 
Access-Control-Allow-Headers: Overwrite, Destination, Content-Type, Depth, User-Agent, Translate, Range, Timeout, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control 
Access-Control-Max-Age: 2147483647 
X-Engine: IT Hit WebDAV Server .Net v3.0.556.0 (Evaluation License) 
DAV: 1, 2, 3 
Public: COPY, DELETE, GET, HEAD, LOCK, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, UNLOCK 
MS-Author-Via: DAV 
Date: Fri, 23 Nov 2012 20:26:51 GMT 
1

「我怎麼能強制只讀模式中打開文件...」

如果您使用的是Windows資源管理器(Windows Shell/Miniredirector/WebFolders)和MS Office,您可以實現IMsItem,它將返回該項目的文件屬性。在您的IMsItem.GetFileAttributes方法實現添加只讀標誌:

/// <summary> 
/// Returns Windows file attributes (readonly, hidden etc.) for this file/folder. 
/// </summary> 
/// <returns>Windows file attributes.</returns> 
public FileAttributes GetFileAttributes() 
{ 
    if (Name.StartsWith(".")) 
    { 
     return fileSystemInfo.Attributes | FileAttributes.Hidden; 
    } 
    return fileSystemInfo.Attributes | FileAttributes.ReadOnly; 
} 

然而這段代碼實際上並沒有被其他用戶/應用程序被覆蓋保護您的文件。要保護文件免遭修改,您必須檢查用戶是否有足夠權限修改您的IFile.Write實施中的文件。