app/soc/views/helper/access.py
changeset 1115 0a723ff3d27c
parent 1107 a878188e225c
child 1122 659984867a9a
equal deleted inserted replaced
1114:65c8d1bfe94b 1115:0a723ff3d27c
    38 from django.utils.translation import ugettext
    38 from django.utils.translation import ugettext
    39 
    39 
    40 from soc.logic import accounts
    40 from soc.logic import accounts
    41 from soc.logic import dicts
    41 from soc.logic import dicts
    42 from soc.logic.models.club_admin import logic as club_admin_logic
    42 from soc.logic.models.club_admin import logic as club_admin_logic
       
    43 from soc.logic.models.document import logic as document_logic
    43 from soc.logic.models.host import logic as host_logic
    44 from soc.logic.models.host import logic as host_logic
    44 from soc.logic.models.notification import logic as notification_logic
    45 from soc.logic.models.notification import logic as notification_logic
    45 from soc.logic.models.request import logic as request_logic
    46 from soc.logic.models.request import logic as request_logic
    46 from soc.logic.models.role import logic as role_logic
    47 from soc.logic.models.role import logic as role_logic
    47 from soc.logic.models.site import logic as site_logic
    48 from soc.logic.models.site import logic as site_logic
   439     fields = {'link_id': django_args['link_id']}
   440     fields = {'link_id': django_args['link_id']}
   440 
   441 
   441     if django_args.get('scope_path'):
   442     if django_args.get('scope_path'):
   442       fields['scope_path'] = django_args['scope_path']
   443       fields['scope_path'] = django_args['scope_path']
   443 
   444 
   444     group_entity = group_logic.logic.getFromFieldsOr404(**fields)
   445     group_entity = group_logic.logic.getFromKeyFieldsOr404(fields)
   445 
   446 
   446     if group_entity.status == 'active':
   447     if group_entity.status == 'active':
   447       return
   448       return
   448 
   449 
   449     # TODO tell the user that this group is not active
   450     # TODO tell the user that this group is not active
   487 
   488 
   488     fields = {'link_id': django_args['link_id'],
   489     fields = {'link_id': django_args['link_id'],
   489         'scope_path': django_args['scope_path'],
   490         'scope_path': django_args['scope_path'],
   490         'role': role_name}
   491         'role': role_name}
   491 
   492 
   492     request_entity = request_logic.getFromFieldsOr404(**fields)
   493     request_entity = request_logic.getFromKeyFieldsOr404(fields)
   493 
   494 
   494     if request_entity.status != 'group_accepted':
   495     if request_entity.status != 'group_accepted':
   495       # TODO tell the user that this request has not been accepted yet
   496       # TODO tell the user that this request has not been accepted yet
   496       self.deny(django_args)
   497       self.deny(django_args)
   497 
   498 
   509 
   510 
   510     fields = {'link_id': django_args['link_id'],
   511     fields = {'link_id': django_args['link_id'],
   511         'scope_path': django_args['scope_path'],
   512         'scope_path': django_args['scope_path'],
   512         'role': role_name}
   513         'role': role_name}
   513 
   514 
   514     request_entity = request_logic.getFromFieldsOr404(**fields)
   515     request_entity = request_logic.getFromKeyFieldsOr404(fields)
   515 
   516 
   516     if request_entity.status in ['completed', 'denied']:
   517     if request_entity.status in ['completed', 'denied']:
   517       # TODO tell the user that this request has been processed
   518       # TODO tell the user that this request has been processed
   518       self.deny(django_args)
   519       self.deny(django_args)
   519 
   520 
   596   @allowDeveloper
   597   @allowDeveloper
   597   def checkIsHostForProgram(self, django_args):
   598   def checkIsHostForProgram(self, django_args):
   598     """Checks if the user is a host for the specified program.
   599     """Checks if the user is a host for the specified program.
   599     """
   600     """
   600 
   601 
   601     key_fields = program_logic.getKeyFieldsFromDict(django_args)
   602     key_fields = program_logic.getKeyFieldsFromFields(django_args)
   602     program = program_logic.getFromFields(**key_fields)
   603     program = program_logic.getFromKeyFields(key_fields)
   603 
   604 
   604     if not program or program.status == 'invalid':
   605     if not program or program.status == 'invalid':
   605       self.deny(django_args)
   606       self.deny(django_args)
   606 
   607 
   607     new_args = {'scope_path': program.scope_path }
   608     new_args = {'scope_path': program.scope_path }
   802 
   803 
   803     fields = {'link_id': django_args['link_id'],
   804     fields = {'link_id': django_args['link_id'],
   804               'scope_path': django_args['scope_path'],
   805               'scope_path': django_args['scope_path'],
   805               }
   806               }
   806 
   807 
   807     role_entity = role_logic.logic.getFromFieldsOr404(**fields)
   808     role_entity = role_logic.logic.getFromKeyFieldsOr404(fields)
   808 
   809 
   809     if role_entity.status != 'active':
   810     if role_entity.status != 'active':
   810       # role is not active
   811       # role is not active
   811       self.deny(django_args)
   812       self.deny(django_args)
   812 
   813 
   840     # apparently it's not the user's role so check if managing this role is allowed
   841     # apparently it's not the user's role so check if managing this role is allowed
   841     fields = {'link_id': django_args['link_id'],
   842     fields = {'link_id': django_args['link_id'],
   842               'scope_path': django_args['scope_path'],
   843               'scope_path': django_args['scope_path'],
   843               }
   844               }
   844 
   845 
   845     role_entity = role_logic.logic.getFromFieldsOr404(**fields)
   846     role_entity = role_logic.logic.getFromKeyFieldsOr404(fields)
   846 
   847 
   847     if role_entity.status != 'active':
   848     if role_entity.status != 'active':
   848       # cannot manage this entity
   849       # cannot manage this entity
   849       self.deny(django_args)
   850       self.deny(django_args)
   850 
   851 
   878       return
   879       return
   879 
   880 
   880     #TODO(SRabbelier) inform user that return_url and field are required
   881     #TODO(SRabbelier) inform user that return_url and field are required
   881     self.deny(django_args)
   882     self.deny(django_args)
   882 
   883 
       
   884   @denySidebar
       
   885   @allowDeveloper
   883   def checkIsDocumentPublic(self, django_args):
   886   def checkIsDocumentPublic(self, django_args):
   884     """Checks whether a document is public.
   887     """Checks whether a document is public.
   885 
   888 
   886     Args:
   889     Args:
   887       django_args: a dictionary with django's arguments
   890       django_args: a dictionary with django's arguments
   888     """
   891     """
   889 
   892 
   890     # TODO(srabbelier): A proper check needs to be done to see if the document
   893     key_fields = document_logic.getKeyFieldsFromFields(django_args)
   891     # is public or not, probably involving analysing it's scope or such.
   894     document_logic.getFromKeyFields(key_fields)
   892     self.allow(django_args)
       
   893 
   895 
   894   @allowIfCheckPasses('checkIsHostForProgram')
   896   @allowIfCheckPasses('checkIsHostForProgram')
   895   def checkIsProgramVisible(self, django_args):
   897   def checkIsProgramVisible(self, django_args):
   896     """Checks whether a program is visible.
   898     """Checks whether a program is visible.
   897     """
   899     """
   898 
   900 
   899     if 'entity' in django_args:
   901     if 'entity' in django_args:
   900       program = django_args['entity']
   902       program = django_args['entity']
   901     else:
   903     else:
   902       key_fields = program_logic.getKeyFieldsFromDict(django_args)
   904       key_fields = program_logic.getKeyFieldsFromFields(django_args)
   903       program = program_logic.getFromFields(**key_fields)
   905       program = program_logic.getFromKeyFields(key_fields)
   904 
   906 
   905     if not program:
   907     if not program:
   906       self.deny(django_args)
   908       self.deny(django_args)
   907 
   909 
   908     if program.status == 'visible':
   910     if program.status == 'visible':