首页 > 解决方案 > 实施 WebDAV ACL:我应该修改还是替换访问条目?

问题描述

假设我第一次对资源执行 ACL 方法:

   <?xml version="1.0" encoding="utf-8" ?>
   <D:acl xmlns:D="DAV:">
     <D:ace>
       <D:principal>
         <D:href>http://www.example.com/users/esedlar</D:href>
       </D:principal>
       <D:grant>
         <D:privilege><D:write/></D:privilege>
       </D:grant>
     </D:ace>
</D:acl>

然后第二次在同一资源上:

<?xml version="1.0" encoding="utf-8" ?>
   <D:acl xmlns:D="DAV:">
     <D:ace>
       <D:principal>
         <D:href>http://www.example.com/users/esedlar</D:href>
       </D:principal>
       <D:grant>
         <D:privilege><D:read/></D:privilege>
       </D:grant>
     </D:ace>
</D:acl>

在请求 #2 之后,是否应该为http://www.example.com/users/esedlar保留 D:write?

标签: webdav

解决方案


RFC 摘录:https ://www.rfc-editor.org/rfc/rfc3744#page-40

具体来说,ACL 方法只允许对未继承且不受保护的 ACE 进行修改。ACL 方法调用会修改资源访问控制列表中的所有非继承和非保护 ACE,以与请求正文的 DAV:acl XML 元素(在第 5.5 节中指定)中包含的 ACE 完全匹配。ACL 请求正文必须仅包含一个 DAV:acl XML 元素。除非可以将资源的 DAV:acl 属性的非继承和非保护 ACE 更新为 ACL 请求中指定的值,否则 ACL 请求必须失败。


推荐阅读