Skip to content

Instantly share code, notes, and snippets.

@merwok
Forked from hadrien/doc.rst
Last active August 29, 2015 14:11
Show Gist options
  • Select an option

  • Save merwok/108718f81ebff057f840 to your computer and use it in GitHub Desktop.

Select an option

Save merwok/108718f81ebff057f840 to your computer and use it in GitHub Desktop.
from pyramid.decorator import reify
from pyramid.security import Allow, ALL_PERMISSIONS, Everyone, Deny, authenticated_userid
class Root(object):
def __init__(self, request):
self.request = request
self.__name__ = ''
self.__parent__ = None
def __getitem__(self, key):
return UsersCollection(key, self)
class UserCollection(object):
def __init__(self, name, parent):
self.__name__ = name
self.__parent__ = parent
def __getitem__(self, key):
return User(key, self)
class User(object):
def __init__(self, name, parent):
self.__name__ = name
self.__parent__ = parent
def __getitem__(self, key):
return NoteCollection(key, self)
# /users/123/notes/
class NoteCollection(object):
__acl__ = [
(Allow, Everyone, 'show'),
(Allow, 'group:owner', ALL_PERMISSIONS),
]
def __init__(self, name, parent):
self.__name__ = name
self.__parent__ = parent
def __getitem__(self, key):
return Note(key, self)
# /users/123/notes/456
class Note(object):
def __init__(self, name, parent):
self.__name__ = name
self.__parent__ = parent
@property
def user(self):
# could be done via find_interface
return self.parent.parent
@property
def userid(self):
# /users/123/notes/456 will return 123
return self.user.__name__
def group_finder(self, request):
principals = []
if authenticated_userid(request) == self.user.__name__:
principals.append('group:owner')
return principals
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment