app/soc/views/helper/access.py
author Lennard de Rijk <ljvderijk@gmail.com>
Fri, 27 Mar 2009 11:16:35 +0000
changeset 2020 df3552deba66
parent 1995 768f533d91e3
child 2032 b881417db09e
permissions -rw-r--r--
Clarified docstring in access.py and changed edit access checks for role views. Addresses Issue 455. Patch by: Lennard de Rijk Reviewed by: to-be-reviewed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
#
1308
35b75ffcbb37 Partially reverted "Update the copyright notice for 2009."
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1307
diff changeset
     3
# Copyright 2008 the Melange authors.
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
#
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     8
#
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    10
#
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    16
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    17
"""Access control helper.
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    18
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    19
The functions in this module can be used to check access control
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    20
related requirements. When the specified required conditions are not
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    21
met, an exception is raised. This exception contains a views that
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    22
either prompts for authentication, or informs the user that they
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    23
do not meet the required criteria.
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
"""
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    25
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    26
__authors__ = [
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    27
  '"Todd Larsen" <tlarsen@google.com>',
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    28
  '"Sverre Rabbelier" <sverre@rabbelier.nl>',
726
ba3d399ec9be Added Notifications.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 720
diff changeset
    29
  '"Lennard de Rijk" <ljvderijk@gmail.com>',
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    30
  '"Pawel Solyga" <pawel.solyga@gmail.com>',
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    31
  ]
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    32
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    33
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
    34
from google.appengine.api import memcache
315
c4f1a07ee340 Add missing blank lines between imports in access.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 309
diff changeset
    35
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 965
diff changeset
    36
from django.utils.translation import ugettext
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    37
720
9eb2522dfa83 Make it possible to invite another Host as Host
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
    38
from soc.logic import dicts
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
    39
from soc.logic import rights as rights_logic
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
    40
from soc.logic.helper import timeline as timeline_helper
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
    41
from soc.logic.models.club_admin import logic as club_admin_logic
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
    42
from soc.logic.models.club_member import logic as club_member_logic
1115
0a723ff3d27c Cleanups in base.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1107
diff changeset
    43
from soc.logic.models.document import logic as document_logic
887
b8c1a6bc913e Take advantage of new "from ... import ... as ..." rules in the style guide.
Todd Larsen <tlarsen@google.com>
parents: 884
diff changeset
    44
from soc.logic.models.host import logic as host_logic
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    45
from soc.logic.models.mentor import logic as mentor_logic
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    46
from soc.logic.models.org_admin import logic as org_admin_logic
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    47
from soc.logic.models.organization import logic as org_logic
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    48
from soc.logic.models.program import logic as program_logic
887
b8c1a6bc913e Take advantage of new "from ... import ... as ..." rules in the style guide.
Todd Larsen <tlarsen@google.com>
parents: 884
diff changeset
    49
from soc.logic.models.request import logic as request_logic
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
    50
from soc.logic.models.role import logic as role_logic
891
3d40190f35b6 Move getToSLink() to soc.views.helper.redirects.getToSRedirect().
Todd Larsen <tlarsen@google.com>
parents: 890
diff changeset
    51
from soc.logic.models.site import logic as site_logic
1445
c2e09f7d62d9 Forgotten import
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1444
diff changeset
    52
from soc.logic.models.sponsor import logic as sponsor_logic
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    53
from soc.logic.models.student import logic as student_logic
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
    54
from soc.logic.models.student_proposal import logic as student_proposal_logic
1142
da2487767ef4 Fix missing dot and wrong import sorting in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1135
diff changeset
    55
from soc.logic.models.timeline import logic as timeline_logic
887
b8c1a6bc913e Take advantage of new "from ... import ... as ..." rules in the style guide.
Todd Larsen <tlarsen@google.com>
parents: 884
diff changeset
    56
from soc.logic.models.user import logic as user_logic
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    57
from soc.views.helper import redirects
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 525
diff changeset
    58
from soc.views import out_of_band
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    59
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    60
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
    61
DEF_NO_USER_LOGIN_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    62
    'Please create <a href="/user/create_profile">User Profile</a>'
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    63
    ' in order to view this page.')
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    64
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 965
diff changeset
    65
DEF_AGREE_TO_TOS_MSG_FMT = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    66
    'You must agree to the <a href="%(tos_link)s">site-wide Terms of'
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    67
    ' Service</a> in your <a href="/user/edit_profile">User Profile</a>'
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    68
    ' in order to view this page.')
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
    69
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 965
diff changeset
    70
DEF_DEV_LOGOUT_LOGIN_MSG_FMT = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    71
    'Please <a href="%%(sign_out)s">sign out</a>'
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    72
    ' and <a href="%%(sign_in)s">sign in</a>'
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    73
    ' again as %(role)s to view this page.')
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    74
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
    75
DEF_NEED_MEMBERSHIP_MSG_FMT = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    76
    'You need to be in the %(status)s group to %(action)s'
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    77
    ' documents in the %(prefix)s prefix.')
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
    78
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    79
DEF_NEED_ROLE_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    80
    'You do not have the required role.')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    81
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    82
DEF_NOT_YOUR_ENTITY_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    83
    'This entity does not belong to you.')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    84
1435
e9a2b1e87b1a Added support for having a format string as scope_path filter
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1388
diff changeset
    85
DEF_NO_ACTIVE_ENTITY_MSG = ugettext(
e9a2b1e87b1a Added support for having a format string as scope_path filter
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1388
diff changeset
    86
    'There is no such active entity.')
e9a2b1e87b1a Added support for having a format string as scope_path filter
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1388
diff changeset
    87
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
    88
DEF_NO_ACTIVE_GROUP_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    89
    'There is no such active group.')
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    90
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    91
DEF_NO_ACTIVE_ROLE_MSG = ugettext(
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    92
    'There is no such active role.')
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
    93
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    94
DEF_ALREADY_PARTICIPATING_MSG = ugettext(
1832
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
    95
    'You cannot become a Student because you are already participating '
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    96
    'in this program.')
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    97
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    98
DEF_ALREADY_STUDENT_ROLE_MSG = ugettext(
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
    99
    'You cannot become a Mentor or Organization Admin because you already are '
1832
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
   100
    'a Student in this program.')
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
   101
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   102
DEF_NO_ACTIVE_PROGRAM_MSG = ugettext(
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   103
    'There is no such active program.')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   104
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   105
DEF_NO_REQUEST_MSG = ugettext(
1870
ea7019607df2 Verbiage fix in ACL
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1832
diff changeset
   106
    'There is no accepted request that would allow you to visit this page. '
ea7019607df2 Verbiage fix in ACL
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1832
diff changeset
   107
    'Perhaps you already accepted this request?')
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   108
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   109
DEF_NO_APPLICATION_MSG = ugettext(
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   110
    'There is no application that would allow you to visit this page.')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   111
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   112
DEF_NEED_PICK_ARGS_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   113
    'The "continue" and "field" args are not both present.')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   114
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   115
DEF_REVIEW_COMPLETED_MSG = ugettext('This Application can not be reviewed '
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   116
    'anymore (it has been completed or rejected).')
1201
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   117
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   118
DEF_REQUEST_COMPLETED_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   119
    'This request cannot be accepted (it is either completed or denied).')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   120
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   121
DEF_SCOPE_INACTIVE_MSG = ugettext(
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   122
    'The scope for this request is not active.')
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   123
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
   124
DEF_SIGN_UP_AS_STUDENT_MSG = ugettext(
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
   125
    'You need to sign up as a Student first.')
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
   126
1995
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
   127
DEF_MAX_PROPOSALS_REACHED = ugettext(
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
   128
    'You have reached the maximum number of Proposals allowed '
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
   129
    'for this program.')
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
   130
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   131
DEF_NO_LIST_ACCESS_MSG = ugettext('You do not have the required rights to '
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   132
    'list documents for this scope and prefix.')
1318
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
   133
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 965
diff changeset
   134
DEF_PAGE_DENIED_MSG = ugettext(
1350
c822368a60b1 Add missing dots in messages in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1334
diff changeset
   135
    'Access to this page has been restricted.')
508
2b90baceac88 Add a access.deny and access.allow method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 481
diff changeset
   136
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
   137
DEF_PREFIX_NOT_IN_ARGS_MSG = ugettext(
1350
c822368a60b1 Add missing dots in messages in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1334
diff changeset
   138
    'A required GET url argument ("prefix") was not specified.')
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
   139
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   140
DEF_PAGE_INACTIVE_MSG = ugettext(
1350
c822368a60b1 Add missing dots in messages in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1334
diff changeset
   141
    'This page is inactive at this time.')
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   142
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 965
diff changeset
   143
DEF_LOGOUT_MSG_FMT = ugettext(
1350
c822368a60b1 Add missing dots in messages in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1334
diff changeset
   144
    'Please <a href="%(sign_out)s">sign out</a> in order to view this page.')
590
37735d97b541 Created a seperate module for editSelf things
Sverre Rabbelier <srabbelier@gmail.com>
parents: 543
diff changeset
   145
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   146
DEF_GROUP_NOT_FOUND_MSG = ugettext(
1350
c822368a60b1 Add missing dots in messages in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1334
diff changeset
   147
    'The requested Group can not be found.')
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   148
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   149
DEF_USER_ACCOUNT_INVALID_MSG_FMT = ugettext(
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   150
    'The <b><i>%(email)s</i></b> account cannot be used with this site, for'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   151
    ' one or more of the following reasons:'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   152
    '<ul>'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   153
    ' <li>the account is invalid</li>'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   154
    ' <li>the account is already attached to a User profile and cannot be'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   155
    ' used to create another one</li>'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   156
    ' <li>the account is a former account that cannot be used again</li>'
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   157
    '</ul>')
508
2b90baceac88 Add a access.deny and access.allow method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 481
diff changeset
   158
1201
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   159
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   160
def allowSidebar(fun):
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   161
  """Decorator that allows access if the sidebar is calling.
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   162
  """
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   163
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   164
  from functools import wraps
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   165
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   166
  @wraps(fun)
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   167
  def wrapper(self, django_args, *args, **kwargs):
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   168
    if django_args.get('SIDEBAR_CALLING'):
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   169
      return
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   170
    return fun(self, django_args, *args, **kwargs)
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   171
  return wrapper
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   172
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
   173
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   174
def denySidebar(fun):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   175
  """Decorator that denies access if the sidebar is calling.
612
3cca81b1e5a1 Moved checkAccess and getCleanedFields into access and forms
Sverre Rabbelier <srabbelier@gmail.com>
parents: 590
diff changeset
   176
  """
3cca81b1e5a1 Moved checkAccess and getCleanedFields into access and forms
Sverre Rabbelier <srabbelier@gmail.com>
parents: 590
diff changeset
   177
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   178
  from functools import wraps
508
2b90baceac88 Add a access.deny and access.allow method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 481
diff changeset
   179
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   180
  @wraps(fun)
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   181
  def wrapper(self, django_args, *args, **kwargs):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   182
    if django_args.get('SIDEBAR_CALLING'):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   183
      raise out_of_band.Error("Sidebar Calling")
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   184
    return fun(self, django_args, *args, **kwargs)
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   185
  return wrapper
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   186
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   187
1073
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   188
def allowIfCheckPasses(checker_name):
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   189
  """Returns a decorator that allows access if the specified checker passes.
1016
15a2f644725f Create a decorator for allowDeveloper
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1012
diff changeset
   190
  """
15a2f644725f Create a decorator for allowDeveloper
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1012
diff changeset
   191
15a2f644725f Create a decorator for allowDeveloper
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1012
diff changeset
   192
  from functools import wraps
15a2f644725f Create a decorator for allowDeveloper
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1012
diff changeset
   193
1073
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   194
  def decorator(fun):
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   195
    """Decorator that allows access if the current user is a Developer.
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   196
    """
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   197
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   198
    @wraps(fun)
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   199
    def wrapper(self, django_args=None, *args, **kwargs):
1073
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   200
      try:
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   201
        # if the check passes we allow access regardless
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   202
        return self.doCheck(checker_name, django_args, [])
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   203
      except out_of_band.Error:
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   204
        # otherwise we run the original check
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   205
        return fun(self, django_args, *args, **kwargs)
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   206
    return wrapper
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   207
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   208
  return decorator
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   209
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   210
feea88d0e1d8 Factor out the allowIfCheckPasses logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1068
diff changeset
   211
allowDeveloper = allowIfCheckPasses('checkIsDeveloper')
1016
15a2f644725f Create a decorator for allowDeveloper
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1012
diff changeset
   212
15a2f644725f Create a decorator for allowDeveloper
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1012
diff changeset
   213
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   214
class Checker(object):
590
37735d97b541 Created a seperate module for editSelf things
Sverre Rabbelier <srabbelier@gmail.com>
parents: 543
diff changeset
   215
  """
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   216
  The __setitem__() and __getitem__() methods are overloaded to DTRT
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   217
  when adding new access rights, and retrieving them, so use these
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   218
  rather then modifying rights directly if so desired.
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   219
  """
972
43018f61b481 Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 970
diff changeset
   220
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   221
  MEMBERSHIP = {
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   222
    'anyone': 'allow',
1248
f318538394d9 Rename checkHasActiveRole to checkHasActiveRoleForScope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1239
diff changeset
   223
    'club_admin': ('checkHasActiveRoleForScope', club_admin_logic),
f318538394d9 Rename checkHasActiveRole to checkHasActiveRoleForScope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1239
diff changeset
   224
    'club_member': ('checkHasActiveRoleForScope', club_member_logic),
1444
b97cfeb423f4 Make use of the new checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1443
diff changeset
   225
    'host': ('checkHasDocumentAccess', [host_logic, 'sponsor']),
b97cfeb423f4 Make use of the new checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1443
diff changeset
   226
    'org_admin': ('checkHasDocumentAccess', [org_admin_logic, 'org']),
b97cfeb423f4 Make use of the new checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1443
diff changeset
   227
    'org_mentor': ('checkHasDocumentAccess', [mentor_logic, 'org']),
b97cfeb423f4 Make use of the new checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1443
diff changeset
   228
    'org_student': ('checkHasDocumentAccess', [student_logic, 'org']),
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   229
    'user': 'checkIsUser',
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   230
    'user_self': ('checkIsUserSelf', 'scope_path'),
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   231
    }
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   232
1442
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   233
  #: the depths of various scopes to other scopes
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   234
  # the 0 entries are not used, and are for clarity purposes only
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   235
  SCOPE_DEPTH = {
1528
abbdf42ab322 Allow to do 'checkHasActiveRole' checks for document access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1525
diff changeset
   236
      'site': None,
1442
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   237
      'sponsor': (sponsor_logic, {'sponsor': 0}),
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   238
      'program': (program_logic, {'sponsor': 1, 'program': 0}),
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   239
      'org': (org_logic, {'sponsor': 2, 'program': 1, 'org': 0}),
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   240
      }
8eec34007e80 Specify how to walk the scope up to another scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1441
diff changeset
   241
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   242
  def __init__(self, params):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   243
    """Adopts base.rights as rights if base is set.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   244
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   245
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   246
    base = params.get('rights') if params else None
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   247
    self.rights = base.rights if base else {}
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   248
    self.id = None
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   249
    self.user = None
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   250
1226
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   251
  def normalizeChecker(self, checker):
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   252
    """Normalizes the checker to a pre-defined format.
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   253
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   254
    The result is guaranteed to be a list of 2-tuples, the first element is a
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   255
    checker (iff there is an checker with the specified name), the second
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   256
    element is a list of arguments that should be passed to the checker when
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   257
    calling it in addition to the standard django_args.
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   258
    """
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   259
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   260
    # Be nice an repack so that it is always a list with tuples
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   261
    if isinstance(checker, tuple):
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   262
      name, arg = checker
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   263
      return (name, (arg if isinstance(arg, list) else [arg]))
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   264
    else:
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   265
      return (checker, [])
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   266
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   267
  def __setitem__(self, key, value):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   268
    """Sets a value only if no old value exists.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   269
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   270
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   271
    oldvalue = self.rights.get(key)
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   272
    self.rights[key] = oldvalue if oldvalue else value
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   273
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   274
  def __getitem__(self, key):
1226
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   275
    """Retrieves and normalizes the right checkers.
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   276
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   277
1226
a671f0d63562 Fix broken document access checks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1223
diff changeset
   278
    return [self.normalizeChecker(i) for i in self.rights.get(key, [])]
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   279
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   280
  def key(self, checker_name):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   281
    """Returns the key for the specified checker for the current user.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   282
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   283
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   284
    return "%s.%s" % (self.id, checker_name)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   285
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   286
  def put(self, checker_name, value):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   287
    """Puts the result for the specified checker in the cache.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   288
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   289
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   290
    retention = 30
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   291
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   292
    memcache_key = self.key(checker_name)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   293
    memcache.add(memcache_key, value, retention)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   294
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   295
  def get(self, checker_name):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   296
    """Retrieves the result for the specified checker from cache.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   297
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   298
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   299
    memcache_key = self.key(checker_name)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   300
    return memcache.get(memcache_key)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   301
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   302
  def doCheck(self, checker_name, django_args, args):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   303
    """Runs the specified checker with the specified arguments.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   304
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   305
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   306
    checker = getattr(self, checker_name)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   307
    checker(django_args, *args)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   308
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   309
  def doCachedCheck(self, checker_name, django_args, args):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   310
    """Retrieves from cache or runs the specified checker.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   311
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   312
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   313
    cached = self.get(checker_name)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   314
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   315
    if cached is None:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   316
      try:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   317
        self.doCheck(checker_name, django_args, args)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   318
        self.put(checker_name, True)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   319
        return
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   320
      except out_of_band.Error, exception:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   321
        self.put(checker_name, exception)
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   322
        raise
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   323
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   324
    if cached is True:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   325
      return
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   326
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   327
    # re-raise the cached exception
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   328
    raise cached
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   329
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   330
  def check(self, use_cache, checker_name, django_args, args):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   331
    """Runs the checker, optionally using the cache.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   332
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   333
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   334
    if use_cache:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   335
      self.doCachedCheck(checker_name, django_args, args)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   336
    else:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   337
      self.doCheck(checker_name, django_args, args)
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   338
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   339
  def setCurrentUser(self, id, user):
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   340
    """Sets up everything for the current user.
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   341
    """
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   342
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   343
    self.id = id
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   344
    self.user = user
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   345
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   346
  def checkAccess(self, access_type, django_args):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   347
    """Runs all the defined checks for the specified type.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   348
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   349
    Args:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   350
      access_type: the type of request (such as 'list' or 'edit')
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   351
      rights: a dictionary containing access check functions
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   352
      django_args: a dictionary with django's arguments
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   353
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   354
    Rights usage:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   355
      The rights dictionary is used to check if the current user is allowed
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   356
      to view the page specified. The functions defined in this dictionary
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   357
      are always called with the provided django_args dictionary as argument. On any
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   358
      request, regardless of what type, the functions in the 'any_access' value
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   359
      are called. If the specified type is not in the rights dictionary, all
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   360
      the functions in the 'unspecified' value are called. When the specified
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   361
      type _is_ in the rights dictionary, all the functions in that access_type's
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   362
      value are called.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   363
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   364
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   365
    use_cache = django_args.get('SIDEBAR_CALLING')
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   366
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   367
    # Call each access checker
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   368
    for checker_name, args in self['any_access']:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   369
      self.check(use_cache, checker_name, django_args, args)
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   370
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   371
    if access_type not in self.rights:
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   372
      # No checks defined, so do the 'generic' checks and bail out
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   373
      for checker_name, args in self['unspecified']:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   374
        self.check(use_cache, checker_name, django_args, args)
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   375
      return
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   376
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   377
    for checker_name, args in self[access_type]:
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   378
      self.check(use_cache, checker_name, django_args, args)
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   379
1300
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   380
  def hasMembership(self, roles, django_args):
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   381
    """Checks whether the user has access to any of the specified roles.
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   382
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   383
    Makes use of self.MEMBERSHIP, which defines checkers specific to
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   384
    document access, as such this method should only be used when checking
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   385
    document access.
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   386
1300
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   387
    Args:
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   388
      roles: a list of roles to check
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   389
      django_args: the django args that should be passed to doCheck
1300
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   390
    """
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   391
1315
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   392
    try:
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   393
      # we need to check manually, as we must return True!
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   394
      self.checkIsDeveloper(django_args)
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   395
      return True
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   396
    except out_of_band.Error:
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   397
      pass
7c58f5cdd5b8 Developers have all roles
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1309
diff changeset
   398
1300
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   399
    for role in roles:
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   400
      try:
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   401
        checker_name, args = self.normalizeChecker(self.MEMBERSHIP[role])
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   402
        self.doCheck(checker_name, django_args, args)
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   403
        # the check passed, we can stop now
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   404
        return True
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   405
      except out_of_band.Error:
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   406
        continue
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   407
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   408
    return False
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   409
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   410
  @allowDeveloper
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   411
  def checkMembership(self, action, prefix, status, django_args):
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   412
    """Checks whether the user has access to the specified status.
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   413
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   414
    Args:
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   415
      action: the action that was performed (e.g., 'read')
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   416
      prefix: the prefix, determines what access set is used
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   417
      status: the access status (e.g., 'public')
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   418
      django_args: the django args to pass on to the checkers
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   419
    """
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   420
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   421
    checker = rights_logic.Checker(prefix)
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   422
    roles = checker.getMembership(status)
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   423
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   424
    message_fmt = DEF_NEED_MEMBERSHIP_MSG_FMT % {
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   425
        'action': action,
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   426
        'prefix': prefix,
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   427
        'status': status,
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   428
        }
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   429
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   430
    # try to see if they belong to any of the roles, if not, raise an
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   431
    # access violation for the specified action, prefix and status.
1300
a89d673771eb Factor out the hasMembership method from checkMembership
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1265
diff changeset
   432
    if not self.hasMembership(roles, django_args):
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   433
      raise out_of_band.AccessViolation(message_fmt)
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   434
1486
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   435
  def checkHasAny(self, django_args, checks):
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   436
    """Checks if any of the checks passes.
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   437
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   438
    If none of the specified checks passes, the exception that the first of the
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   439
    checks raised is reraised.
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   440
    """
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   441
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   442
    first = None
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   443
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   444
    for checker_name, args in checks:
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   445
      try:
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   446
        self.doCheck(checker_name, django_args, args)
1488
4b7cec48e26c Brown paper bag fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1486
diff changeset
   447
        # one check passed, all is well
4b7cec48e26c Brown paper bag fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1486
diff changeset
   448
        return
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   449
      except out_of_band.Error, exception:
1486
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   450
        # store the first esception
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   451
        first = first if first else exception
1486
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   452
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   453
    # none passed, re-raise the first exception
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   454
    raise first
c417a4188e73 Added a checkHasAny method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1481
diff changeset
   455
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   456
  def allow(self, django_args):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   457
    """Never raises an alternate HTTP response.  (an access no-op, basically).
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   458
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   459
    Args:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   460
      django_args: a dictionary with django's arguments
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   461
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   462
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   463
    return
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   464
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   465
  def deny(self, django_args=None):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   466
    """Always raises an alternate HTTP response.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   467
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   468
    Args:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   469
      django_args: a dictionary with django's arguments
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   470
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   471
    Raises:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   472
      always raises AccessViolationResponse if called
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   473
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   474
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   475
    context = django_args.get('context', {})
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   476
    context['title'] = 'Access denied'
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   477
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   478
    raise out_of_band.AccessViolation(DEF_PAGE_DENIED_MSG, context=context)
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   479
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   480
  def checkIsLoggedIn(self, django_args=None):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   481
    """Raises an alternate HTTP response if Google Account is not logged in.
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   482
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   483
    Args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   484
      django_args: a dictionary with django's arguments, not used
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   485
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   486
    Raises:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   487
      AccessViolationResponse:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   488
      * if no Google Account is even logged in
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   489
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   490
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   491
    if self.id:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   492
      return
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   493
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   494
    raise out_of_band.LoginRequest()
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   495
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   496
  def checkNotLoggedIn(self, django_args=None):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   497
    """Raises an alternate HTTP response if Google Account is logged in.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   498
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   499
    Args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   500
      django_args: a dictionary with django's arguments, not used
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   501
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   502
    Raises:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   503
      AccessViolationResponse:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   504
      * if a Google Account is currently logged in
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   505
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   506
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   507
    if not self.id:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   508
      return
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   509
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   510
    raise out_of_band.LoginRequest(message_fmt=DEF_LOGOUT_MSG_FMT)
888
a75ae24f04cb Add checkAgreesToSiteToS() (partially implemented until circular import fixed).
Todd Larsen <tlarsen@google.com>
parents: 887
diff changeset
   511
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   512
  def checkIsUser(self, django_args=None):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   513
    """Raises an alternate HTTP response if Google Account has no User entity.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   514
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   515
    Args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   516
      django_args: a dictionary with django's arguments, not used
895
e70ffd079438 Even developers need to agree to the terms of service for Melange
Sverre Rabbelier <srabbelier@gmail.com>
parents: 892
diff changeset
   517
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   518
    Raises:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   519
      AccessViolationResponse:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   520
      * if no User exists for the logged-in Google Account, or
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   521
      * if no Google Account is logged in at all
1012
73f0b61f2d9d Fold checkAgreesToSiteToS into checkIsUser
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1007
diff changeset
   522
      * if User has not agreed to the site-wide ToS, if one exists
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   523
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   524
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   525
    self.checkIsLoggedIn()
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   526
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   527
    if not self.user:
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   528
      raise out_of_band.LoginRequest(message_fmt=DEF_NO_USER_LOGIN_MSG)
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   529
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1016
diff changeset
   530
    if user_logic.agreesToSiteToS(self.user):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   531
      return
293
1edd01373e71 Add an access control module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   532
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   533
    # Would not reach this point of site-wide ToS did not exist, since
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   534
    # agreesToSiteToS() call above always returns True if no ToS is in effect.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   535
    login_msg_fmt = DEF_AGREE_TO_TOS_MSG_FMT % {
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   536
        'tos_link': redirects.getToSRedirect(site_logic.getSingleton())}
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   537
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   538
    raise out_of_band.LoginRequest(message_fmt=login_msg_fmt)
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   539
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   540
  @allowDeveloper
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   541
  def checkIsHost(self, django_args=None):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   542
    """Checks whether the current user has a role entity.
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   543
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   544
    Args:
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   545
      django_args: the keyword args from django, not used
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   546
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   547
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   548
    if not django_args:
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   549
      django_args = {}
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   550
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   551
    return self.checkHasActiveRole(django_args, host_logic)
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   552
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   553
  @allowDeveloper
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   554
  def checkIsUserSelf(self, django_args, field_name):
1142
da2487767ef4 Fix missing dot and wrong import sorting in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1135
diff changeset
   555
    """Checks whether the specified user is the logged in user.
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   556
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   557
    Args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   558
      django_args: the keyword args from django, only field_name is used
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   559
    """
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   560
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   561
    self.checkIsUser()
1198
3318f8d00691 Added some extra isUser checks to make sure that you have to accept the ToS before you can do anything concerning requests.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1192
diff changeset
   562
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   563
    if not field_name in django_args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   564
      self.deny()
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   565
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   566
    if self.user.link_id == django_args[field_name]:
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   567
      return
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   568
1177
53c802c2a2e2 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1176
diff changeset
   569
    raise out_of_band.AccessViolation(DEF_NOT_YOUR_ENTITY_MSG)
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   570
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   571
  def checkIsUnusedAccount(self, django_args=None):
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   572
    """Raises an alternate HTTP response if Google Account has a User entity.
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   573
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   574
    Args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   575
      django_args: a dictionary with django's arguments, not used
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   576
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   577
    Raises:
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   578
      AccessViolationResponse:
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   579
      * if a User exists for the logged-in Google Account, or
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   580
      * if a User has this Gooogle Account in their formerAccounts list
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   581
    """
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   582
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   583
    self.checkIsLoggedIn()
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   584
1716
a387bb7a39d4 Fixes banned people being able to create a new user entity.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1633
diff changeset
   585
    fields = {'account': self.id}
a387bb7a39d4 Fixes banned people being able to create a new user entity.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1633
diff changeset
   586
    user_entity = user_logic.getForFields(fields, unique=True)
a387bb7a39d4 Fixes banned people being able to create a new user entity.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1633
diff changeset
   587
a387bb7a39d4 Fixes banned people being able to create a new user entity.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1633
diff changeset
   588
    if not user_entity and not user_logic.isFormerAccount(self.id):
1048
0fe0cb8f7253 Changed access.py to comply more with the style of the module.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1043
diff changeset
   589
      # this account has not been used yet
0fe0cb8f7253 Changed access.py to comply more with the style of the module.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1043
diff changeset
   590
      return
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   591
1048
0fe0cb8f7253 Changed access.py to comply more with the style of the module.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1043
diff changeset
   592
    message_fmt = DEF_USER_ACCOUNT_INVALID_MSG_FMT % {
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   593
        'email' : self.id.email()
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   594
        }
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   595
1048
0fe0cb8f7253 Changed access.py to comply more with the style of the module.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1043
diff changeset
   596
    raise out_of_band.LoginRequest(message_fmt=message_fmt)
0fe0cb8f7253 Changed access.py to comply more with the style of the module.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1043
diff changeset
   597
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   598
  def checkHasUserEntity(self, django_args=None):
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   599
    """Raises an alternate HTTP response if Google Account has no User entity.
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   600
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   601
    Args:
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   602
      django_args: a dictionary with django's arguments
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   603
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   604
    Raises:
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   605
      AccessViolationResponse:
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   606
      * if no User exists for the logged-in Google Account, or
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   607
      * if no Google Account is logged in at all
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   608
    """
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   609
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   610
    self.checkIsLoggedIn()
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   611
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   612
    if self.user:
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   613
      return
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   614
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   615
    raise out_of_band.LoginRequest(message_fmt=DEF_NO_USER_LOGIN_MSG)
1043
5e15994b2033 Redone the user's profile page.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1037
diff changeset
   616
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   617
  def checkIsDeveloper(self, django_args=None):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   618
    """Raises an alternate HTTP response if Google Account is not a Developer.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   619
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   620
    Args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   621
      django_args: a dictionary with django's arguments, not used
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   622
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   623
    Raises:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   624
      AccessViolationResponse:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   625
      * if User is not a Developer, or
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   626
      * if no User exists for the logged-in Google Account, or
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   627
      * if no Google Account is logged in at all
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   628
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   629
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   630
    self.checkIsUser()
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   631
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   632
    if user_logic.isDeveloper(account=self.id, user=self.user):
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   633
      return
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   634
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   635
    login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   636
        'role': 'a Site Developer ',
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   637
        }
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   638
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   639
    raise out_of_band.LoginRequest(message_fmt=login_message_fmt)
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   640
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   641
  @allowDeveloper
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   642
  @denySidebar
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   643
  def _checkIsActive(self, django_args, logic, fields):
1435
e9a2b1e87b1a Added support for having a format string as scope_path filter
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1388
diff changeset
   644
    """Raises an alternate HTTP response if the entity is not active.
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   645
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   646
    Args:
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   647
      django_args: a dictionary with django's arguments
1435
e9a2b1e87b1a Added support for having a format string as scope_path filter
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1388
diff changeset
   648
      logic: the logic that should be used to look up the entity
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   649
      fields: the name of the fields that should be copied verbatim
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   650
              from the django_args as filter
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   651
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   652
    Raises:
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   653
      AccessViolationResponse:
1438
e484f9acf999 Updated comments in access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1435
diff changeset
   654
      * if no entity is found
e484f9acf999 Updated comments in access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1435
diff changeset
   655
      * if the entity status is not active
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   656
    """
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   657
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   658
    self.checkIsUser()
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   659
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   660
    fields = dicts.filter(django_args, fields)
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   661
    fields['status'] = 'active'
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   662
1179
427d2ec42823 Rewrite getForFields to use GQL instead of the Query API
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1177
diff changeset
   663
    entity = logic.getForFields(fields, unique=True)
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   664
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   665
    if entity:
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   666
      return
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   667
1435
e9a2b1e87b1a Added support for having a format string as scope_path filter
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1388
diff changeset
   668
    raise out_of_band.AccessViolation(message_fmt=DEF_NO_ACTIVE_ENTITY_MSG)
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   669
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   670
  def checkGroupIsActiveForScopeAndLinkId(self, django_args, logic):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   671
    """Checks that the specified group is active.
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   672
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   673
    Only group where both the link_id and the scope_path match the value
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   674
    of the link_id and the scope_path from the django_args are considered.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   675
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   676
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   677
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   678
      logic: the logic that should be used to look up the entity
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   679
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   680
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   681
    fields = ['scope_path', 'link_id']
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   682
    self._checkIsActive(django_args, logic, fields)
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   683
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   684
  def checkGroupIsActiveForLinkId(self, django_args, logic):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   685
    """Checks that the specified group is active.
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   686
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   687
    Only group where the link_id matches the value of the link_id
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   688
    from the django_args are considered.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   689
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   690
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   691
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   692
      logic: the logic that should be used to look up the entity
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   693
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   694
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   695
    self._checkIsActive(django_args, logic, ['link_id'])
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   696
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   697
  def checkHasActiveRole(self, django_args, logic):
1203
38225f2ad3a6 Renamed checkHasRole to checkHasActiveRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1201
diff changeset
   698
    """Checks that the user has the specified active role.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   699
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   700
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   701
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   702
      logic: the logic that should be used to look up the entity
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   703
    """
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   704
1555
cba45797f4b9 Do not modify django_args directly
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1554
diff changeset
   705
    django_args = django_args.copy()
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   706
    django_args['user'] = self.user
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   707
    self._checkIsActive(django_args, logic, ['user'])
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   708
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   709
  def _checkHasActiveRoleFor(self, django_args, logic, field_name):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   710
    """Checks that the user has the specified active role.
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   711
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   712
    Only roles where the field as specified by field_name matches the
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   713
    scope_path from the django_args are considered.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   714
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   715
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   716
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   717
      logic: the logic that should be used to look up the entity
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   718
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   719
1554
163c879d1ffe Fixed a brown paper bag bug in _checkHasActiveRoleFor
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1538
diff changeset
   720
    fields = [field_name, 'user']
1555
cba45797f4b9 Do not modify django_args directly
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1554
diff changeset
   721
    django_args = django_args.copy()
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   722
    django_args['user'] = self.user
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   723
    self._checkIsActive(django_args, logic, fields)
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   724
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   725
  def checkHasActiveRoleForKeyFieldsAsScope(self, django_args, logic):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   726
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   727
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   728
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   729
    key_fields = "%(scope_path)s/%(link_id)s" % django_args
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   730
    new_args = {'scope_path': key_fields}
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   731
    self._checkHasActiveRoleFor(new_args, logic, 'scope_path')
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   732
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   733
  def checkHasActiveRoleForScope(self, django_args, logic):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   734
    """Checks that the user has the specified active role.
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   735
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   736
    Only roles where the scope_path matches the scope_path from the
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   737
    django_args are considered.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   738
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   739
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   740
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   741
      logic: the logic that should be used to look up the entity
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   742
    """
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   743
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   744
    self._checkHasActiveRoleFor(django_args, logic, 'scope_path')
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   745
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   746
  def checkHasActiveRoleForLinkId(self, django_args, logic):
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   747
    """Checks that the user has the specified active role.
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   748
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   749
    Only roles where the link_id matches the link_id from the
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   750
    django_args are considered.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   751
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   752
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   753
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   754
      logic: the logic that should be used to look up the entity
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   755
    """
1557
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   756
1525
fe906cdbf0e9 Remove direct uses of checkIsActive, replace with helper methods
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1524
diff changeset
   757
    self._checkHasActiveRoleFor(django_args, logic, 'link_id')
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   758
1557
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   759
  def checkHasActiveRoleForLinkIdAsScope(self, django_args, logic):
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   760
    """Checks that the user has the specified active role.
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   761
1558
5ff25327371e Fixed a comment typo
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1557
diff changeset
   762
    Only roles where the scope_path matches the link_id from the
1557
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   763
    django_args are considered.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   764
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   765
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   766
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   767
      logic: the logic that should be used to look up the entity
1557
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   768
    """
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   769
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   770
    django_args = django_args.copy()
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   771
    django_args['scope_path'] = django_args['link_id']
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   772
    self._checkHasActiveRoleFor(django_args, logic, 'scope_path')
9e32e6258319 Properly fixed host access now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1555
diff changeset
   773
1443
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   774
  def checkHasDocumentAccess(self, django_args, logic, target_scope):
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   775
    """Checks that the user has access to the specified document scope.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   776
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   777
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   778
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   779
      logic: the logic that should be used to look up the entity
1443
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   780
    """
1577
b0bb5c8b5f78 Fix bug in checkDocumentPick of soc.views.helper.access module, which cause KeyError exceptions in document picker.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1559
diff changeset
   781
    
1443
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   782
    prefix = django_args['prefix']
1528
abbdf42ab322 Allow to do 'checkHasActiveRole' checks for document access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1525
diff changeset
   783
    if self.SCOPE_DEPTH.get(prefix):
abbdf42ab322 Allow to do 'checkHasActiveRole' checks for document access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1525
diff changeset
   784
      scope_logic, depths = self.SCOPE_DEPTH[prefix]
abbdf42ab322 Allow to do 'checkHasActiveRole' checks for document access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1525
diff changeset
   785
    else:
abbdf42ab322 Allow to do 'checkHasActiveRole' checks for document access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1525
diff changeset
   786
      return self.checkHasActiveRole(django_args, logic)
abbdf42ab322 Allow to do 'checkHasActiveRole' checks for document access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1525
diff changeset
   787
1443
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   788
    depth = depths.get(target_scope, 0)
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   789
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   790
    # nothing to do
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   791
    if not (scope_logic and depth):
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   792
      return self.checkHasActiveRoleForScope(django_args, logic)
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   793
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   794
    # we don't want to modify the original django args
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   795
    django_args = django_args.copy()
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   796
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   797
    entity = scope_logic.getFromKeyName(django_args['scope_path'])
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   798
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   799
    # cannot have access to the specified scope if it is invalid
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   800
    if not entity:
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   801
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_ACTIVE_ENTITY_MSG)
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   802
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   803
    # walk up the scope to where we need to be
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   804
    for _ in range(depth):
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   805
      entity = entity.scope
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   806
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   807
    django_args['scope_path'] = entity.key().name()
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   808
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   809
    self.checkHasActiveRoleForScope(django_args, logic)
8ce8314d1c8f Added a checkHasDocumentAccess method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1442
diff changeset
   810
1189
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   811
  def checkSeeded(self, django_args, checker_name, *args):
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   812
    """Wrapper to update the django_args with the contens of seed first.
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   813
    """
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   814
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   815
    django_args.update(django_args.get('seed', {}))
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   816
    self.doCheck(checker_name, django_args, args)
14357ec13647 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1184
diff changeset
   817
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   818
  def checkCanMakeRequestToGroup(self, django_args, group_logic):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   819
    """Raises an alternate HTTP response if the specified group is not in an
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1080
diff changeset
   820
    active status.
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   821
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   822
    Args:
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   823
      django_args: a dictionary with django's arguments
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   824
      group_logic: Logic module for the type of group which the request is for
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   825
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   826
1198
3318f8d00691 Added some extra isUser checks to make sure that you have to accept the ToS before you can do anything concerning requests.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1192
diff changeset
   827
    self.checkIsUser(django_args)
3318f8d00691 Added some extra isUser checks to make sure that you have to accept the ToS before you can do anything concerning requests.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1192
diff changeset
   828
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   829
    group_entity = role_logic.getGroupEntityFromScopePath(
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   830
        group_logic.logic, django_args['scope_path'])
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   831
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   832
    if not group_entity:
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   833
      raise out_of_band.Error(DEF_GROUP_NOT_FOUND_MSG, status=404)
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   834
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1080
diff changeset
   835
    if group_entity.status != 'active':
1198
3318f8d00691 Added some extra isUser checks to make sure that you have to accept the ToS before you can do anything concerning requests.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1192
diff changeset
   836
      # tell the user that this group is not active
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   837
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_ACTIVE_GROUP_MSG)
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   838
979
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   839
    return
789e70941055 Added checkCanMakeRequestToGroup to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 974
diff changeset
   840
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   841
  def checkCanCreateFromRequest(self, django_args, role_name):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   842
    """Raises an alternate HTTP response if the specified request does not exist
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1080
diff changeset
   843
       or if it's status is not group_accepted. Also when the group this request
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1080
diff changeset
   844
       is from is in an inactive or invalid status access will be denied.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   845
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   846
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   847
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   848
      role_name: name of the role
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   849
    """
972
43018f61b481 Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 970
diff changeset
   850
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   851
    self.checkIsUserSelf(django_args, 'link_id')
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
   852
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   853
    fields = {
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   854
        'link_id': django_args['link_id'],
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   855
        'scope_path': django_args['scope_path'],
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   856
        'role': role_name,
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   857
        'status': 'group_accepted',
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   858
        }
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
   859
1176
c211191e7d81 Fixed access related bugs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1163
diff changeset
   860
    entity = request_logic.getForFields(fields, unique=True)
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
   861
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   862
    if entity and (entity.scope.status not in ['invalid', 'inactive']):
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   863
      return
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
   864
1177
53c802c2a2e2 More access related fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1176
diff changeset
   865
    raise out_of_band.AccessViolation(message_fmt=DEF_NO_REQUEST_MSG)
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
   866
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   867
  def checkIsMyGroupAcceptedRequest(self, django_args):
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   868
    """Checks whether the user can accept the specified request.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   869
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   870
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   871
      django_args: a dictionary with django's arguments
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   872
    """
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   873
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   874
    self.checkCanCreateFromRequest(django_args, django_args['role'])
972
43018f61b481 Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 970
diff changeset
   875
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   876
  def checkCanProcessRequest(self, django_args, role_name):
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   877
    """Raises an alternate HTTP response if the specified request does not exist
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1080
diff changeset
   878
       or if it's status is completed or denied. Also Raises an alternate HTTP response
1061
09c243461de8 Redone access checks concerning groups to deal with the state property.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1048
diff changeset
   879
       whenever the group in the request is not active.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   880
       
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   881
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   882
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   883
      role_name: name of the role
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   884
    """
948
bd956f419ad9 Add missing blank lines and remove unused checkIsInvited function from soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 943
diff changeset
   885
1198
3318f8d00691 Added some extra isUser checks to make sure that you have to accept the ToS before you can do anything concerning requests.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1192
diff changeset
   886
    self.checkIsUser(django_args)
3318f8d00691 Added some extra isUser checks to make sure that you have to accept the ToS before you can do anything concerning requests.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1192
diff changeset
   887
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   888
    fields = {
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   889
        'link_id': django_args['link_id'],
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   890
        'scope_path': django_args['scope_path'],
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   891
        'role': role_name,
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   892
        }
960
129efa976d6d Added checkCanProcessRequest in access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 958
diff changeset
   893
1115
0a723ff3d27c Cleanups in base.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1107
diff changeset
   894
    request_entity = request_logic.getFromKeyFieldsOr404(fields)
960
129efa976d6d Added checkCanProcessRequest in access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 958
diff changeset
   895
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1080
diff changeset
   896
    if request_entity.status in ['completed', 'denied']:
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   897
      raise out_of_band.AccessViolation(message_fmt=DEF_REQUEST_COMPLETED_MSG)
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
   898
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   899
    if request_entity.scope.status == 'active':
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   900
      return
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
   901
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
   902
    raise out_of_band.AccessViolation(message_fmt=DEF_SCOPE_INACTIVE_MSG)
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   903
1218
569a3fe9cb88 Cleaned up getKeyNameFromFields in Logic base.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   904
  @allowDeveloper
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   905
  @denySidebar
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   906
  def checkIsHostForProgram(self, django_args):
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   907
    """Checks if the user is a host for the specified program.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   908
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   909
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   910
      django_args: a dictionary with django's arguments
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   911
    """
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   912
1218
569a3fe9cb88 Cleaned up getKeyNameFromFields in Logic base.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   913
    program = program_logic.getFromKeyFields(django_args)
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   914
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
   915
    if not program or program.status == 'invalid':
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
   916
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_ACTIVE_PROGRAM_MSG)
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
   917
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
   918
    new_args = {'scope_path': program.scope_path }
1248
f318538394d9 Rename checkHasActiveRole to checkHasActiveRoleForScope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1239
diff changeset
   919
    self.checkHasActiveRoleForScope(new_args, host_logic)
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
   920
1200
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
   921
  @allowDeveloper
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   922
  @denySidebar
1250
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   923
  def checkIsHostForProgramInScope(self, django_args):
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   924
    """Checks if the user is a host for the specified program.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   925
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   926
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   927
      django_args: a dictionary with django's arguments
1250
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   928
    """
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   929
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   930
    program = program_logic.getFromKeyName(django_args['scope_path'])
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   931
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   932
    if not program or program.status == 'invalid':
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   933
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_ACTIVE_PROGRAM_MSG)
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   934
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   935
    django_args = {'scope_path': program.scope_path}
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   936
    self.checkHasActiveRoleForScope(django_args, host_logic)
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   937
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   938
  @allowDeveloper
b06e6e014658 Fixed access checkers for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1248
diff changeset
   939
  @denySidebar
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   940
  def checkIsActivePeriod(self, django_args, period_name, key_name_arg):
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   941
    """Checks if the given period is active for the given program.
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
   942
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   943
    Args:
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   944
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
   945
      period_name: the name of the period which is checked
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   946
      key_name_arg: the entry in django_args that specifies the given program
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   947
        keyname. If none is given the key_name is constructed from django_args
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   948
        itself.
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   949
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   950
    Raises:
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   951
      AccessViolationResponse:
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   952
      * if no active Program is found
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   953
      * if the period is not active
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   954
    """
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   955
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   956
    if key_name_arg and key_name_arg in django_args:
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   957
      key_name = django_args[key_name_arg]
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   958
    else:
1334
5009b63c247a Fixed a bug in access.py where a non-existing variable would have been called.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1318
diff changeset
   959
      key_name = program_logic.getKeyNameFromFields(django_args)
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   960
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   961
    program_entity = program_logic.getFromKeyName(key_name)
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   962
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   963
    if not program_entity or (
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   964
        program_entity.status in ['inactive', 'invalid']):
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   965
      raise out_of_band.AccessViolation(message_fmt=DEF_SCOPE_INACTIVE_MSG)
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   966
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   967
    if timeline_helper.isActivePeriod(program_entity.timeline, period_name):
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   968
      return
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   969
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   970
    raise out_of_band.AccessViolation(message_fmt=DEF_PAGE_INACTIVE_MSG)
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   971
1922
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   972
  @allowDeveloper
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   973
  @denySidebar
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   974
  def checkisAfterEvent(self, django_args, event_name, key_name_arg):
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   975
    """Checks if the given event has taken place for the given program.
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   976
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   977
    Args:
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   978
      django_args: a dictionary with django's arguments
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   979
      event_name: the name of the event which is checked
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   980
      key_name_arg: the entry in django_args that specifies the given program
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   981
        keyname. If none is given the key_name is constructed from django_args
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   982
        itself.
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   983
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   984
    Raises:
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   985
      AccessViolationResponse:
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   986
      * if no active Program is found
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   987
      * if the event has not taken place yet
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   988
    """
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   989
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   990
    if key_name_arg and key_name_arg in django_args:
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   991
      key_name = django_args[key_name_arg]
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   992
    else:
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   993
      key_name = program_logic.getKeyNameFromFields(django_args)
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   994
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   995
    program_entity = program_logic.getFromKeyName(key_name)
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   996
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   997
    if not program_entity or (
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   998
        program_entity.status in ['inactive', 'invalid']):
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
   999
      raise out_of_band.AccessViolation(message_fmt=DEF_SCOPE_INACTIVE_MSG)
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
  1000
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
  1001
    if timeline_helper.isAfterEvent(program_entity.timeline, event_name):
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
  1002
      return
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
  1003
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
  1004
    raise out_of_band.AccessViolation(message_fmt=DEF_PAGE_INACTIVE_MSG)
800ec7253cf4 Added new access method that can check if a given event has taken place already.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1876
diff changeset
  1005
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1006
  def checkCanCreateOrgApp(self, django_args, period_name):
1237
b5bf2aa0f3f9 Added missing comment in access.py and removed excessive whitespace.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1232
diff changeset
  1007
    """Checks to see if the program in the scope_path is accepting org apps
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1008
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1009
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1010
      django_args: a dictionary with django's arguments
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1011
      period_name: the name of the period which is checked
1237
b5bf2aa0f3f9 Added missing comment in access.py and removed excessive whitespace.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1232
diff changeset
  1012
    """
b5bf2aa0f3f9 Added missing comment in access.py and removed excessive whitespace.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1232
diff changeset
  1013
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1014
    if 'seed' in django_args:
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
  1015
      return self.checkIsActivePeriod(django_args['seed'],
1223
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1016
          period_name, 'scope_path')
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1017
    else:
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1018
      return
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1019
aca77e2cc8f7 Added new access checks to deal with timeline for programs.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
  1020
  @allowDeveloper
1200
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1021
  def checkCanEditGroupApp(self, django_args, group_app_logic):
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1022
    """Checks if the group_app in args is valid to be edited by 
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1023
       the current user.
1200
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1024
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1025
    Args:
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1026
      django_args: a dictionary with django's arguments
1200
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1027
      group_app_logic: A logic instance for the Group Application
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1028
    """
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1029
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1030
    self.checkIsUser(django_args)
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1031
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1032
    fields = {
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1033
        'link_id': django_args['link_id'],
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1034
        'applicant': self.user,
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1035
        'status' : ['needs review', 'rejected']
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1036
        }
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1037
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1038
    if 'scope_path' in django_args:
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1039
      fields['scope_path'] = django_args['scope_path']
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1040
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1041
    entity = group_app_logic.getForFields(fields)
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1042
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1043
    if entity:
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1044
      return
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1045
1876
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1046
    del fields['applicant']
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1047
    fields['backup_admin'] = self.user
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1048
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1049
    entity = group_app_logic.getForFields(fields)
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1050
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1051
    if entity:
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1052
      return
a77d4cdcc052 Allow backup admins to edit org application
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1870
diff changeset
  1053
1200
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1054
    raise out_of_band.AccessViolation(message_fmt=DEF_NOT_YOUR_ENTITY_MSG)
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1055
1201
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1056
  @allowSidebar
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1057
  def checkCanReviewGroupApp(self, django_args, group_app_logic):
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1058
    """Checks if the group_app in args is valid to be reviewed.
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1059
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1060
    Args:
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1061
      django_args: a dictionary with django's arguments
1201
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1062
      group_app_logic: A logic instance for the Group Application
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1063
    """
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1064
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1065
    if 'link_id' not in django_args:
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1066
      # calling review overview, so we can't check a specified entity
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1067
      return
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1068
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1069
    fields = {
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1070
        'link_id': django_args['link_id'],
1538
b1ab0ec9c950 Changed access checks for group applications to allow reviewing of rejected applications.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1529
diff changeset
  1071
        'status': ['needs review', 'accepted', 'rejected', 'ignored',
b1ab0ec9c950 Changed access checks for group applications to allow reviewing of rejected applications.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1529
diff changeset
  1072
            'pre-accepted', 'pre-rejected']
1201
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1073
        }
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1074
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1075
    if 'scope_path' in django_args:
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1076
      fields['scope_path'] = django_args['scope_path']
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1077
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1078
    entity = group_app_logic.getForFields(fields)
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1079
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1080
    if entity:
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1081
      return
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1082
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1083
    raise out_of_band.AccessViolation(message_fmt=DEF_REVIEW_COMPLETED_MSG)
0a4c1af700a0 Added checkCanReviewGroupApp to acces.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1200
diff changeset
  1084
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1085
  @allowDeveloper
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1086
  def checkIsApplicationAccepted(self, django_args, app_logic):
1782
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1087
    """Returns an alternate HTTP response if Google Account has no accepted
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1088
       Group Application entity for the specified arguments.
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1089
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1090
    Args:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1091
      django_args: a dictionary with django's arguments
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1092
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1093
     Raises:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1094
       AccessViolationResponse: if the required authorization is not met
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1095
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1096
    Returns:
1782
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1097
      None if the Accepted Group App exists for the specified program, or a subclass
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1098
      of django.http.HttpResponse which contains the alternate response
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1099
      should be returned by the calling view.
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1100
    """
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1101
1012
73f0b61f2d9d Fold checkAgreesToSiteToS into checkIsUser
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1007
diff changeset
  1102
    self.checkIsUser(django_args)
814
25ffebd9fa8f Implement the checkIsClubAppAccepted function
Sverre Rabbelier <srabbelier@gmail.com>
parents: 802
diff changeset
  1103
1782
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1104
    application = app_logic.getFromKeyFieldsOr404(django_args)
814
25ffebd9fa8f Implement the checkIsClubAppAccepted function
Sverre Rabbelier <srabbelier@gmail.com>
parents: 802
diff changeset
  1105
1782
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1106
    # check if the application is accepted and the applicant is the current user
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1107
    if (application.applicant.key() == self.user.key()) and (
501ffd646d1e checkIsApplicationAccepted now properly checks if the application is really from the applying user.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1776
diff changeset
  1108
        application.status == 'accepted'):
884
ded4850776c8 Changed checkIsClubAppAccepted into a more generic checkIsApplicationAccepted.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 882
diff changeset
  1109
      return
814
25ffebd9fa8f Implement the checkIsClubAppAccepted function
Sverre Rabbelier <srabbelier@gmail.com>
parents: 802
diff changeset
  1110
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
  1111
    raise out_of_band.AccessViolation(message_fmt=DEF_NO_APPLICATION_MSG)
726
ba3d399ec9be Added Notifications.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 720
diff changeset
  1112
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1113
  def checkIsNotParticipatingInProgramInScope(self, django_args):
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1114
    """Checks if the current user has no roles for the given 
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1115
       program in django_args.
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1116
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1117
    Args:
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1118
      django_args: a dictionary with django's arguments
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1119
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1120
     Raises:
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1121
       AccessViolationResponse: if the current user has a student, mentor or
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1122
                                org admin role for the given program.
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1123
    """
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1124
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1125
    if not django_args.get('scope_path'):
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1126
      raise out_of_band.AccessViolation(message_fmt=DEF_PAGE_DENIED_MSG)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1127
1776
f86b0fe5f4d9 Replace getFromKeyName with getFromKeyNameOr404 where appropriate in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1716
diff changeset
  1128
    program_entity = program_logic.getFromKeyNameOr404(django_args['scope_path'])
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1129
    user_entity = user_logic.getForCurrentAccount()
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1130
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1131
    filter = {'user': user_entity,
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1132
              'scope': program_entity,
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1133
              'status': 'active'}
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1134
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1135
    # check if the current user is already a student for this program
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1136
    student_role = student_logic.getForFields(filter, unique=True)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1137
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1138
    if student_role:
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1139
      raise out_of_band.AccessViolation(
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1140
          message_fmt=DEF_ALREADY_PARTICIPATING_MSG)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1141
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1142
    # fill the role_list with all the mentor and org admin roles for this user
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1143
    role_list = []
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1144
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1145
    filter = {'user': user_entity,
1832
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1146
              'program': program_entity,
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1147
              'status': 'active'}
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1148
1832
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1149
    mentor_role = mentor_logic.getForFields(filter, unique=True)
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1150
    if mentor_role:
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1151
      # the current user has a role for the given program
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1152
      raise out_of_band.AccessViolation(
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1153
            message_fmt=DEF_ALREADY_PARTICIPATING_MSG)
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1154
1832
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1155
    org_admin_role = org_admin_logic.getForFields(filter, unique=True)
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1156
    if org_admin_role:
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1157
      # the current user has a role for the given program
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1158
      raise out_of_band.AccessViolation(
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1159
            message_fmt=DEF_ALREADY_PARTICIPATING_MSG)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1160
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1161
    # no roles found, access granted
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1162
    return
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1163
1559
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1164
  def checkIsNotStudentForProgramInScope(self, django_args):
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1165
    """Checks if the current user is not a student for the given
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1166
       program in django_args.
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1167
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1168
    Args:
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1169
      django_args: a dictionary with django's arguments
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1170
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1171
     Raises:
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1172
       AccessViolationResponse: if the current user has a student
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1173
                                role for the given program.
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1174
    """
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1175
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1176
    if django_args.get('seed'):
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1177
      key_name = django_args['seed']['scope_path']
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1178
    else:
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1179
      key_name = django_args['scope_path']
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1180
1776
f86b0fe5f4d9 Replace getFromKeyName with getFromKeyNameOr404 where appropriate in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1716
diff changeset
  1181
    program_entity = program_logic.getFromKeyNameOr404(key_name)
1559
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1182
    user_entity = user_logic.getForCurrentAccount()
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1183
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1184
    filter = {'user': user_entity,
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1185
              'scope': program_entity,
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1186
              'status': 'active'}
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1187
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1188
    # check if the current user is already a student for this program
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1189
    student_role = student_logic.getForFields(filter, unique=True)
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1190
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1191
    if student_role:
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1192
      raise out_of_band.AccessViolation(
1832
5ded837037e7 Fixed checkIsNotParticipatingInProgramInScope to just query for the given program instead of iterating over a list.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1782
diff changeset
  1193
          message_fmt=DEF_ALREADY_STUDENT_ROLE_MSG)
1559
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1194
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1195
    return
283046e54c01 Fixed issue 205.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1558
diff changeset
  1196
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1197
  def checkIsNotStudentForProgramOfOrg(self, django_args):
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1198
    """Checks if the current user has no active Student role for the program
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1199
       that the organization in the scope_path is participating in.
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1200
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1201
    Args:
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1202
      django_args: a dictionary with django's arguments
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1203
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1204
     Raises:
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1205
       AccessViolationResponse: if the current user is a student for the
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1206
                                program the organization is in.
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1207
    """
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1208
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1209
    if not django_args.get('scope_path'):
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1210
      raise out_of_band.AccessViolation(message_fmt=DEF_PAGE_DENIED_MSG)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1211
1776
f86b0fe5f4d9 Replace getFromKeyName with getFromKeyNameOr404 where appropriate in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1716
diff changeset
  1212
    org_entity = org_logic.getFromKeyNameOr404(django_args['scope_path'])
1375
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1213
    user_entity = user_logic.getForCurrentAccount()
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1214
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1215
    filter = {'scope': org_entity.scope,
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1216
              'user': user_entity,
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1217
              'status': 'active'}
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1218
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1219
    student_role = student_logic.getForFields(filter=filter, unique=True)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1220
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1221
    if student_role:
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1222
      raise out_of_band.AccessViolation(
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1223
          message_fmt=DEF_ALREADY_STUDENT_ROLE_MSG)
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1224
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1225
    return
edcb2add6934 Added new access methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1366
diff changeset
  1226
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1227
  @allowDeveloper
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1228
  def checkRoleAndStatusForStudentProposal(self, django_args, allowed_roles,
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1229
                                           role_status, proposal_status):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1230
    """Checks if the current user has access to the given proposal.
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1231
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1232
    Args:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1233
      django_args: a dictionary with django's arguments
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1234
      allowed_roles: list with names for the roles allowed to pass access check
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1235
      role_status: list with states allowed for the role
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1236
      proposal_status: a list with states allowed for the proposal
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1237
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1238
     Raises:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1239
       AccessViolationResponse:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1240
         - If there is no proposal found
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1241
         - If the proposal is not in one of the required states.
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1242
         - If the user does not have any ofe the required roles
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1243
    """
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1244
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1245
    self.checkIsUser(django_args)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1246
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1247
    # bail out with 404 if no proposal is found
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1248
    proposal_entity = student_proposal_logic.getFromKeyFieldsOr404(django_args)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1249
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1250
    if not proposal_entity.status in proposal_status:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1251
      # this proposal can not be accessed at the moment
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1252
      raise out_of_band.AccessViolation(
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1253
          message_fmt=DEF_NO_ACTIVE_ENTITY_MSG)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1254
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1255
    user_entity = self.user
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1256
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1257
    if 'proposer' in allowed_roles:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1258
      # check if this proposal belongs to the current user
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1259
      student_entity = proposal_entity.scope
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1260
      if (user_entity.key() == student_entity.user.key()) and (
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1261
          student_entity.status in role_status):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1262
        return
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1263
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1264
    filter = {'user': user_entity,
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1265
        'status': role_status}
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1266
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1267
    if 'host' in allowed_roles:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1268
      # check if the current user is a host for this proposal's program
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1269
      filter['scope'] =  proposal_entity.program
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1270
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1271
      if host_logic.getForFields(filter, unique=True):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1272
        return
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1273
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1274
    if 'org_admin' in allowed_roles:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1275
      # check if the current user is an admin for this proposal's org
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1276
      filter['scope'] = proposal_entity.org
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1277
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1278
      if org_admin_logic.getForFields(filter, unique=True):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1279
        return
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1280
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1281
    if 'mentor' in allowed_roles:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1282
      # check if the current user is a mentor for this proposal's org
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1283
      filter['scope'] = proposal_entity.org
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1284
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1285
      if mentor_logic.getForFields(filter, unique=True):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1286
        return
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1287
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1288
    # no roles found, access denied
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1289
    raise out_of_band.AccessViolation(
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1290
        message_fmt=DEF_NEED_ROLE_MSG)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1291
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1292
  @allowDeveloper
1995
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1293
  def checkCanStudentPropose(self, django_args, key_location, check_limit):
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1294
    """Checks if the program for this student accepts proposals.
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1295
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1296
    Args:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1297
      django_args: a dictionary with django's arguments
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
  1298
      key_location: the key for django_args in which the key_name
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1299
                    from the student is stored
1995
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1300
      check_limit: iff true checks if the student reached the apps_tasks_limit
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1301
                   for the given program.
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1302
    """
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1303
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1304
    self.checkIsUser(django_args)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1305
1529
0800753ebc6a Fixed a bug in student access check
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1528
diff changeset
  1306
    if django_args.get('seed'):
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1307
      key_name = django_args['seed'][key_location]
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1308
    else:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1309
      key_name = django_args[key_location]
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1310
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1311
    student_entity = student_logic.getFromKeyName(key_name)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1312
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1313
    if not student_entity or student_entity.status == 'invalid':
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1314
      raise out_of_band.AccessViolation(
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1315
        message_fmt=DEF_SIGN_UP_AS_STUDENT_MSG)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1316
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1317
    program_entity = student_entity.scope
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1318
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1319
    if not timeline_helper.isActivePeriod(program_entity.timeline,
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1320
                                          'student_signup'):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1321
      raise out_of_band.AccessViolation(message_fmt=DEF_PAGE_INACTIVE_MSG)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1322
1995
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1323
    if check_limit:
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1324
      # count all studentproposals by the student
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1325
      fields = {'scope': student_entity}
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1326
      proposal_query = student_proposal_logic.getQueryForFields(fields)
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1327
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1328
      if proposal_query.count() >= program_entity.apps_tasks_limit:
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1329
        # too many proposals access denied
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1330
        raise out_of_band.AccessViolation(message_fmt=DEF_MAX_PROPOSALS_REACHED)
768f533d91e3 Added check to prevent students from submitting more proposals then allowed by the program settings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1922
diff changeset
  1331
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1332
    return
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1333
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1334
  @allowDeveloper
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1335
  def checkIsStudent(self, django_args, key_location, status):
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1336
    """Checks if the current user is the given student.
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1337
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1338
    Args:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1339
      django_args: a dictionary with django's arguments
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
  1340
      key_location: the key for django_args in which the key_name
1466
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1341
                    from the student is stored
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1342
      status: the allowed status for the student
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1343
    """
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1344
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1345
    self.checkIsUser(django_args)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1346
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1347
    if 'seed' in django_args:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1348
      key_name = django_args['seed'][key_location]
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1349
    else:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1350
      key_name = django_args[key_location]
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1351
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1352
    student_entity = student_logic.getFromKeyName(key_name)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1353
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1354
    if not student_entity or student_entity.status not in status:
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1355
      raise out_of_band.AccessViolation(
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1356
        message_fmt=DEF_SIGN_UP_AS_STUDENT_MSG)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1357
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1358
    if student_entity.user.key() != self.user.key():
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1359
      # this is not the page for the current user
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1360
      self.deny(django_args)
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1361
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1362
    return
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1363
bfcec687b362 Added several access checks for student proposals.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1445
diff changeset
  1364
  @allowDeveloper
1180
6290c9e49848 Fixed club_app
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1179
diff changeset
  1365
  def checkIsMyEntity(self, django_args, logic,
6290c9e49848 Fixed club_app
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1179
diff changeset
  1366
                      field_name='user', user=False):
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1367
    """Checks whether the entity belongs to the user.
1481
0ccf92d073e8 Add missing comment to checkIsMyEntity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1475
diff changeset
  1368
0ccf92d073e8 Add missing comment to checkIsMyEntity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1475
diff changeset
  1369
    Args:
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1370
      django_args: a dictionary with django's arguments
1481
0ccf92d073e8 Add missing comment to checkIsMyEntity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1475
diff changeset
  1371
      logic: the logic that should be used to fetch the entity
0ccf92d073e8 Add missing comment to checkIsMyEntity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1475
diff changeset
  1372
      field_name: the name of the field the entity uses to store it's owner
2020
df3552deba66 Clarified docstring in access.py and changed edit access checks for role views.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1995
diff changeset
  1373
      user: true iff the entity stores the user's reference, false iff keyname
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1374
    """
791
30da180c4bca Added the club_app view, logic and model
Sverre Rabbelier <srabbelier@gmail.com>
parents: 746
diff changeset
  1375
1012
73f0b61f2d9d Fold checkAgreesToSiteToS into checkIsUser
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1007
diff changeset
  1376
    self.checkIsUser(django_args)
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1377
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1378
    fields = {
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1379
        'link_id': django_args['link_id'],
1180
6290c9e49848 Fixed club_app
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1179
diff changeset
  1380
        field_name: self.user if user else self.user.key().name()
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1381
        }
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1382
1200
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1383
    if 'scope_path' in django_args:
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1384
      fields['scope_path'] = django_args['scope_path']
e68fd70ba076 Added checkCanEditGroupApp to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1198
diff changeset
  1385
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1386
    entity = logic.getForFields(fields)
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
  1387
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1388
    if entity:
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1389
      return
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
  1390
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1391
    raise out_of_band.AccessViolation(message_fmt=DEF_NOT_YOUR_ENTITY_MSG)
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1392
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1393
  @allowDeveloper
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1394
  @denySidebar
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1395
  def checkIsAllowedToManageRole(self, django_args, role_logic, manage_role_logic):
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1396
    """Returns an alternate HTTP response if the user is not allowed to manage
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
  1397
       the role given in args.
1068
8a06ebff014e Changed docstring for checkIsAllowedToManageRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1066
diff changeset
  1398
8a06ebff014e Changed docstring for checkIsAllowedToManageRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1066
diff changeset
  1399
     Args:
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1400
       django_args: a dictionary with django's arguments
1068
8a06ebff014e Changed docstring for checkIsAllowedToManageRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1066
diff changeset
  1401
       role_logic: determines the logic for the role in args.
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
  1402
       manage_role_logic: determines the logic for the role which is allowed
1068
8a06ebff014e Changed docstring for checkIsAllowedToManageRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1066
diff changeset
  1403
           to manage this role.
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1404
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1405
     Raises:
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1406
       AccessViolationResponse: if the required authorization is not met
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1407
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1408
    Returns:
1068
8a06ebff014e Changed docstring for checkIsAllowedToManageRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1066
diff changeset
  1409
      None if the given role is active and belongs to the current user.
1524
30ada09bdc6f Make django_args optional where appropriate and whitespace fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1505
diff changeset
  1410
      None if the current User has an active role (from manage_role_logic)
1068
8a06ebff014e Changed docstring for checkIsAllowedToManageRole.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1066
diff changeset
  1411
           that belongs to the same scope as the role that needs to be managed
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1412
    """
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1413
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1414
    try:
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1415
      # check if it is my role the user's own role
1248
f318538394d9 Rename checkHasActiveRole to checkHasActiveRoleForScope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1239
diff changeset
  1416
      self.checkHasActiveRoleForScope(django_args, role_logic)
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1417
    except out_of_band.Error:
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1418
      pass
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1419
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1420
    # apparently it's not the user's role so check if managing this role is allowed
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1421
    fields = {
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1422
        'link_id': django_args['link_id'],
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1423
        'scope_path': django_args['scope_path'],
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1424
        }
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1425
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
  1426
    role_entity = role_logic.getFromKeyFieldsOr404(fields)
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
  1427
    if role_entity.status != 'active':
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
  1428
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_ACTIVE_ROLE_MSG)
914
6ec8dd2a73b3 Added various access methods in preperation for the new request system.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 895
diff changeset
  1429
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1430
    fields = {
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1431
        'link_id': self.user.link_id,
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1432
        'scope_path': django_args['scope_path'],
1142
da2487767ef4 Fix missing dot and wrong import sorting in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1135
diff changeset
  1433
        'status': 'active'
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1434
        }
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1435
1184
bd9c6101d41d Use .logic in checkIsAllowedToManageRole at the caller
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1180
diff changeset
  1436
    manage_entity = manage_role_logic.getForFields(fields, unique=True)
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1437
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1438
    if not manage_entity:
1239
065e5bcf90f0 Stylefixes in access.py and removal of self.deny calls
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1237
diff changeset
  1439
      raise out_of_band.AccessViolation(message_fmt=DEF_NOT_YOUR_ENTITY_MSG)
1066
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1440
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1441
    return
b22750a2b04a Added checkIsAllowedToManageRole to access.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1061
diff changeset
  1442
1265
cecb2b35f805 Added allowsidebar to checkIsDocumentReadable.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1263
diff changeset
  1443
  @allowSidebar
1115
0a723ff3d27c Cleanups in base.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1107
diff changeset
  1444
  @allowDeveloper
1496
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1445
  def checkIsDocumentReadable(self, django_args, key_name_field=None):
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1446
    """Checks whether a document is readable.
699
4e8eefe95748 Add and use a placeholder for checkIsDocumentPublic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 639
diff changeset
  1447
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1448
    Args:
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1449
      django_args: a dictionary with django's arguments
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1450
      key_name_field: key name field
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 999
diff changeset
  1451
    """
699
4e8eefe95748 Add and use a placeholder for checkIsDocumentPublic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 639
diff changeset
  1452
1496
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1453
    if key_name_field:
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1454
      key_name = django_args[key_name_field]
1776
f86b0fe5f4d9 Replace getFromKeyName with getFromKeyNameOr404 where appropriate in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1716
diff changeset
  1455
      document = document_logic.getFromKeyNameOr404(key_name)
1496
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1456
    else:
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1457
      document = document_logic.getFromKeyFieldsOr404(django_args)
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1458
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1459
    self.checkMembership('read', document.prefix,
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1460
                         document.read_access, django_args)
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1461
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1462
  @denySidebar
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1463
  @allowDeveloper
1496
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1464
  def checkIsDocumentWritable(self, django_args, key_name_field=None):
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1465
    """Checks whether a document is writable.
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1466
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1467
    Args:
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1468
      django_args: a dictionary with django's arguments
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1469
      key_name_field: key name field
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1470
    """
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1471
1496
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1472
    if key_name_field:
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1473
      key_name = django_args[key_name_field]
1776
f86b0fe5f4d9 Replace getFromKeyName with getFromKeyNameOr404 where appropriate in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1716
diff changeset
  1474
      document = document_logic.getFromKeyNameOr404(key_name)
1496
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1475
    else:
da531df1d92e Allow the document lookup to be done by key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1488
diff changeset
  1476
      document = document_logic.getFromKeyFieldsOr404(django_args)
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1477
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1478
    self.checkMembership('write', document.prefix,
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1479
                         document.write_access, django_args)
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1073
diff changeset
  1480
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1481
  @allowDeveloper
1318
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1482
  def checkDocumentList(self, django_args):
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1483
    """Checks whether the user is allowed to list documents.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1484
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1485
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1486
      django_args: a dictionary with django's arguments
1318
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1487
    """
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1488
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1489
    filter = django_args['filter']
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1490
    prefix = filter['prefix']
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1491
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1492
    checker = rights_logic.Checker(prefix)
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1493
    roles = checker.getMembership('list')
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1494
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1495
    if not self.hasMembership(roles, filter):
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1496
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_LIST_ACCESS_MSG)
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1497
3f41f33a4ad2 Add custom access check for document listing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1315
diff changeset
  1498
  @allowDeveloper
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1499
  def checkDocumentPick(self, django_args):
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1500
    """Checks whether the user has access to the specified pick url.
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1501
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1502
    Will update the 'read_access' field of django_args['GET'].
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1503
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1504
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1505
      django_args: a dictionary with django's arguments
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1506
    """
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1507
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1508
    get_args = django_args['GET']
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1509
    # make mutable in order to inject the proper read_access filter
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1510
    mutable = get_args._mutable
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1511
    get_args._mutable = True
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1512
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1513
    if 'prefix' not in get_args:
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1514
      raise out_of_band.AccessViolation(message_fmt=DEF_PREFIX_NOT_IN_ARGS_MSG)
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1515
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1516
    prefix = get_args['prefix']
1577
b0bb5c8b5f78 Fix bug in checkDocumentPick of soc.views.helper.access module, which cause KeyError exceptions in document picker.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1559
diff changeset
  1517
    django_args['prefix'] = prefix
1606
6f7e5a566d9a Fix the KeyError: 'scope_path' error in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1577
diff changeset
  1518
    django_args['scope_path'] = get_args['scope_path']
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1519
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1520
    checker = rights_logic.Checker(prefix)
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1521
    memberships = checker.getMemberships()
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1522
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1523
    roles = []
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1524
    for key, value in memberships.iteritems():
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1525
      if self.hasMembership(value, django_args):
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1526
        roles.append(key)
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1527
1309
ba51a0cd311d Fix a bug if you have no roles at all
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
  1528
    if not roles:
ba51a0cd311d Fix a bug if you have no roles at all
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
  1529
      roles = ['deny']
ba51a0cd311d Fix a bug if you have no roles at all
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
  1530
1305
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1531
    get_args.setlist('read_access', roles)
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1532
    get_args._mutable = mutable
9567bb475d6d Do access checks on the pick url for documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1300
diff changeset
  1533
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1534
  def checkCanEditTimeline(self, django_args):
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1535
    """Checks whether this program's timeline may be edited.
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1536
    
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1537
    Args:
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1538
      django_args: a dictionary with django's arguments
1135
24d695060863 Hook up the ACL system for documents.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1122
diff changeset
  1539
    """
1633
6b65707f4248 Remove unused imports, style and too long lines fixes, remove unused variables, rename too short variable names, fix docstrings in soc.views.helper.access module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1606
diff changeset
  1540
    
1475
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1466
diff changeset
  1541
    time_line_keyname = timeline_logic.getKeyFieldsFromFields(django_args)
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
  1542
    timeline_entity = timeline_logic.getFromKeyName(time_line_keyname)
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
  1543
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
  1544
    if not timeline_entity:
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
  1545
      # timeline does not exists so deny
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
  1546
      self.deny(django_args)
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1085
diff changeset
  1547
1475
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1466
diff changeset
  1548
    fields = program_logic.getKeyFieldsFromFields(django_args)
1163
d8c50be19232 Cleaned up access.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1142
diff changeset
  1549
    self.checkIsHostForProgram(fields)