diff --git a/CHANGELOG b/CHANGELOG index bba1a4cdd9..2bc7e0793b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Handle current-user-privilege-set on webdav.collection + Version 1.4.0 - 2009-10-19 * Bug fixes (see mercurial logs for details) * Add datetime_field on xxx2Many to use a specific _datetime when reading the related record diff --git a/trytond/protocols/webdav.py b/trytond/protocols/webdav.py index deb60778a8..9a6b7a79f7 100644 --- a/trytond/protocols/webdav.py +++ b/trytond/protocols/webdav.py @@ -477,23 +477,43 @@ class TrytonDAVInterface(iface.dav_interface): return self.mkcol(dst) def _get_dav_current_user_privilege_set(self, uri): + dbname, dburi = self._get_dburi(uri) + privileges = [] + if not dbname or not dburi: + privileges = ['create', 'read', 'write', 'delete'] + else: + cursor = DATABASE['cursor'] + pool = Pool(DATABASE['dbname']) + try: + collection_obj = pool.get('webdav.collection') + privileges = collection_obj.current_user_privilege_set( + cursor, int(USER_ID), dburi, cache=CACHE) + except KeyError: + pass + except Exception, exception: + self._log_exception(exception) + pass doc = domimpl.createDocument(None, 'privilege', None) privilege = doc.documentElement privilege.tagName = 'D:privilege' - read = doc.createElement('D:read') - privilege.appendChild(read) - write = doc.createElement('D:write') - privilege.appendChild(write) - bind = doc.createElement('D:bind') - privilege.appendChild(bind) - unbind = doc.createElement('D:unbind') - privilege.appendChild(unbind) - write_content = doc.createElement('D:write-content') - privilege.appendChild(write_content) - write_properties = doc.createElement('D:write-properties') - privilege.appendChild(write_properties) - read_acl = doc.createElement('D:read-acl') - privilege.appendChild(read_acl) + if 'create' in privileges: + bind = doc.createElement('D:bind') + privilege.appendChild(bind) + if 'read' in privileges: + read = doc.createElement('D:read') + privilege.appendChild(read) + read_acl = doc.createElement('D:read-acl') + privilege.appendChild(read_acl) + if 'write' in privileges: + write = doc.createElement('D:write') + privilege.appendChild(write) + write_content = doc.createElement('D:write-content') + privilege.appendChild(write_content) + write_properties = doc.createElement('D:write-properties') + privilege.appendChild(write_properties) + if 'delete' in privileges: + unbind = doc.createElement('D:unbind') + privilege.appendChild(unbind) return privilege TrytonDAVInterface.PROPS['DAV:'] = tuple(list(TrytonDAVInterface.PROPS['DAV:']) \ diff --git a/trytond/webdav/webdav.py b/trytond/webdav/webdav.py index ed607ae998..90c040edf0 100644 --- a/trytond/webdav/webdav.py +++ b/trytond/webdav/webdav.py @@ -590,6 +590,10 @@ class Collection(ModelSQL, ModelView): return 1 return None + def current_user_privilege_set(self, cursor, user, uri, context=None, + cache=None): + return ['create', 'read', 'write', 'delete'] + Collection()