Revision a6eb13e9 pithos/backends/simple.py
b/pithos/backends/simple.py | ||
---|---|---|
235 | 235 |
|
236 | 236 |
logger.debug("get_object_permissions: %s %s %s", account, container, name) |
237 | 237 |
path = self._get_objectinfo(account, container, name)[0] |
238 |
return self._get_permissions(path) |
|
238 |
perm_path, perms = self._get_permissions(path) |
|
239 |
if path == perm_path: |
|
240 |
return perms |
|
241 |
return {} |
|
239 | 242 |
|
240 | 243 |
def update_object_permissions(self, user, account, container, name, permissions): |
241 | 244 |
"""Update the permissions associated with the object.""" |
... | ... | |
476 | 479 |
|
477 | 480 |
src_version_id, dest_version_id = self._copy_version(path, path, not replace, True) |
478 | 481 |
for k, v in meta.iteritems(): |
479 |
sql = 'insert or replace into metadata (version_id, key, value) values (?, ?, ?)' |
|
480 |
self.con.execute(sql, (dest_version_id, k, v)) |
|
482 |
if not replace and v == '': |
|
483 |
sql = 'delete from metadata where version_id = ? and key = ?' |
|
484 |
self.con.execute(sql, (dest_version_id, k)) |
|
485 |
else: |
|
486 |
sql = 'insert or replace into metadata (version_id, key, value) values (?, ?, ?)' |
|
487 |
self.con.execute(sql, (dest_version_id, k, v)) |
|
481 | 488 |
self.con.commit() |
482 | 489 |
|
483 | 490 |
def _can_read(self, user, path): |
... | ... | |
510 | 517 |
return r, w |
511 | 518 |
|
512 | 519 |
def _get_permissions(self, path): |
513 |
sql = 'select read, write from permissions where name = ?' |
|
514 |
c = self.con.execute(sql, (path,)) |
|
520 |
# Check for permissions at path or above. |
|
521 |
sql = 'select name, read, write from permissions where ? like name || ?' |
|
522 |
c = self.con.execute(sql, (path, '%')) |
|
515 | 523 |
row = c.fetchone() |
516 | 524 |
if not row: |
517 |
return {} |
|
525 |
return path, {}
|
|
518 | 526 |
|
519 |
r, w = row |
|
527 |
name, r, w = row
|
|
520 | 528 |
if r == '' and w == '': |
521 | 529 |
return {'private': True} |
522 | 530 |
ret = {} |
... | ... | |
524 | 532 |
ret['write'] = w.split(',') |
525 | 533 |
if r != '': |
526 | 534 |
ret['read'] = r.split(',') |
527 |
return ret |
|
535 |
return name, ret
|
|
528 | 536 |
|
529 | 537 |
def _put_permissions(self, path, r, w): |
530 | 538 |
sql = 'insert or replace into permissions (name, read, write) values (?, ?, ?)' |
Also available in: Unified diff