self.xfeature_destroy(path)
return
feature = self.xfeature_create(path)
+ self.feature_clear(feature, READ)
+ self.feature_clear(feature, WRITE)
if r:
- self.feature_clear(feature, READ)
self.feature_setmany(feature, READ, r)
if w:
- self.feature_clear(feature, WRITE)
self.feature_setmany(feature, WRITE, w)
def access_get(self, path):
del(permissions[WRITE])
return permissions
+ def access_members(self, path):
+ feature = self.xfeature_get(path)
+ if not feature:
+ return []
+ permissions = self.feature_dict(feature)
+ members = set()
+ members.update(permissions.get(READ, []))
+ members.update(permissions.get(WRITE, []))
+ for m in set(members):
+ parts = m.split(':', 1)
+ if len(parts) != 2:
+ continue
+ user, group = parts
+ members.remove(m)
+ members.update(self.group_members(user, group))
+ return list(members)
+
def access_clear(self, path):
"""Revoke access to path (both permissions and public)."""
self.xfeature_destroy(path)
self.public_unset(path)
+ def access_clear_bulk(self, paths):
+ """Revoke access to path (both permissions and public)."""
+
+ self.xfeature_destroy_bulk(paths)
+ self.public_unset_bulk(paths)
+
def access_check(self, path, access, member):
"""Return true if the member has this access to the path."""