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))
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
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
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'}})
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'}})
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 }
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):