Пример #1
0
    def test_decorators(self) :

        god = User(username='******', email_address='*****@*****.**')
        god.save()

        group, created= TgGroup.objects.get_or_create(group_name='group',
                                                      display_name='Our Group', 
                                                      place=None, level='member', user=god)
        group.to_security_context()

        b = group.create_OurPost(god, title='test decorator')
        from apps.plus_permissions.models import get_interface_map
        i_editor = get_interface_map(OurPost)['Editor']

        @secure_resource(OurPost, required_interfaces=['Editor'])
        def foo(request, resource, *args, **kwargs) :
            resource.title = "blah"
            return True

        class FakeRequest :
            def __init__(self, user) :
                self.user = user

        u = User(username='******',email_address='*****@*****.**')
        u.save()

        self.assertFalse(has_access(u, b, 'OurPost.Editor'))

        self.assertEquals(HttpResponseForbidden, foo(FakeRequest(u), b.id).__class__)

        b.get_inner().get_security_context().add_arbitrary_agent(u, 'OurPost.Editor', god)
        self.assertTrue(foo(FakeRequest(u), b.id))
Пример #2
0
def create_custom_security_context(self):
    original_sc = self.get_security_context()
    # create a new sc
    # set it's agent and admin
    # copy the tags and therefore the permissions to the new sec context
    new_sc = self.to_security_context()
    new_sc.context_agent = original_sc.context_agent
    new_sc.context_admin = original_sc.context_admin
    new_sc.save()

    types = [self.__class__] + PossibleTypes[self.__class__]
    applicable_interfaces = []
    for typ in types:
        interfaces = [typ.__name__ + "." + iface for iface in get_interface_map(typ.__name__)]
        applicable_interfaces.extend(interfaces)
    for tag in original_sc.get_tags():
        if tag.interface in applicable_interfaces:
            tag.clone_for_context(new_sc)

    return new_sc
Пример #3
0
def create_custom_security_context(self):
    original_sc = self.get_security_context()
    # create a new sc
    # set it's agent and admin
    # copy the tags and therefore the permissions to the new sec context
    new_sc = self.to_security_context()
    new_sc.context_agent = original_sc.context_agent
    new_sc.context_admin = original_sc.context_admin
    new_sc.save()

    types = [self.__class__] + PossibleTypes[self.__class__]
    applicable_interfaces = []
    for typ in types:
        interfaces = [
            typ.__name__ + '.' + iface
            for iface in get_interface_map(typ.__name__)
        ]
        applicable_interfaces.extend(interfaces)
    for tag in original_sc.get_tags():
        if tag.interface in applicable_interfaces:
            tag.clone_for_context(new_sc)

    return new_sc
Пример #4
0
    stub = InterfaceWriteProperty

class WikiPageCreator:
    created_by = InterfaceWriteProperty

class WikiPageDelete:
    delete = InterfaceCallProperty

class WikiPageCommentor: 
    comment = InterfaceCallProperty


class WikiPageCommentReader:
    view_comments = InterfaceReadProperty

if not get_interface_map(WikiPage):
    WikiPageInterfaces = {'Viewer':WikiPageViewer,
                          'Editor':WikiPageEditor,
                          'Delete':WikiPageDelete,
                          'Creator':WikiPageCreator,
                          "Commentor":WikiPageCommentor,
                          "ViewComments":WikiPageCommentReader}

    add_type_to_interface_map(content_type, WikiPageInterfaces)

if not SliderOptions.get(WikiPage, False):
    SetSliderOptions(WikiPage, {'InterfaceOrder':['Viewer', 'Editor','Commentor', 'ManagePermissions'], 'InterfaceLabels':{'Viewer':'View', 'Editor':'Edit', 'Commentor':'Comment', 'ManagePermissions':'Change Permissions'}})



Пример #5
0
    author = InterfaceWriteProperty

class WikiPageCreator:
    created_by = InterfaceWriteProperty

class WikiPageManager:
    delete = InterfaceCallProperty
    move_to_new_group = InterfaceCallProperty

class WikiPageCommentor: 
    comment = InterfaceCallProperty

class WikiPageCommentViewer:
    view_comments = InterfaceReadProperty

if not get_interface_map(WikiPage):
    WikiPageInterfaces = {'Viewer':WikiPageViewer,
                          'Editor':WikiPageEditor,
                          'Manager':WikiPageManager,
                          'Creator':WikiPageCreator,
                          "Commentor":WikiPageCommentor,
                          "ViewComments":WikiPageCommentViewer}

    add_type_to_interface_map(content_type, WikiPageInterfaces)

if not SliderOptions.get(WikiPage, False):
    SetSliderOptions(WikiPage, {'InterfaceOrder':['Viewer', 'Editor','Commentor', 'Manager', 'ManagePermissions'], 'InterfaceLabels':{'Viewer':'View', 'Editor':'Edit', 'Commentor':'Comment', 'Manager':'Manage (Move / Delete)', 'ManagePermissions':'Change Permissions'}})



Пример #6
0
class TgGroupInvite:
    invite_member = InterfaceCallProperty
    create_Contact = InterfaceCallProperty


class TgGroupStatusViewer:
    current_status = InterfaceCallProperty


class SetManagePermissions:
    pass


from apps.plus_permissions.models import add_type_to_interface_map

if not get_interface_map(TgGroup):
    TgGroupInterfaces = {
        'Viewer': TgGroupViewer,
        'Editor': TgGroupEditor,
        'Delete': TgGroupDelete,
        'ManageMembers': TgGroupManageMembers,
        'Join': TgGroupJoin,
        'Leave': TgGroupLeave,
        'Commentor': TgGroupComment,
        'Uploader': TgGroupUploader,
        'Message': TgGroupMessage,
        'Invite': TgGroupInvite,
        'GroupTypeEditor': TgGroupTypeEditor,
        'StatusViewer': TgGroupStatusViewer,
        'SetManagePermissions': SetManagePermissions
    }
Пример #7
0

class TgGroupManageMembers:
    pk = InterfaceReadProperty
    add_member = InterfaceCallProperty
    accept_member = InterfaceCallProperty
    remove_member = InterfaceCallProperty


class SetManagePermissions:
    pass


from apps.plus_permissions.models import add_type_to_interface_map

if not get_interface_map(TgGroup):
    TgGroupInterfaces = {'Viewer': TgGroupViewer,
                         'Editor': TgGroupEditor,
                         'Invite': TgGroupInviteMember,
                         'ManageMembers': TgGroupManageMembers,
                         'Join': TgGroupJoin,
                         'Comment':TgGroupComment,
                         'Uploader':TgGroupUploader,
                         'SetManagePermissions':SetManagePermissions}
    add_type_to_interface_map(TgGroup, TgGroupInterfaces)


# use InterfaceOrder to draw the slider and constraints, these are used in rendering the sliders and in validating the results
# these exist on a per type basis and are globals for their type.
# they don't need to be stored in the db
if not SliderOptions.get(TgGroup, False):