227
227
"""Find a user in a store by login name."""
228
228
return store.find(cls, cls.login == unicode(login)).one()
230
def get_permissions(self, user):
230
def get_permissions(self, user, config):
231
231
"""Determine privileges held by a user over this object.
233
233
If the user requesting privileges is this user or an admin,
257
257
def __repr__(self):
258
258
return "<%s '%s'>" % (type(self).__name__, self.short_name)
260
def get_permissions(self, user):
260
def get_permissions(self, user, config):
261
261
"""Determine privileges held by a user over this object.
263
263
If the user requesting privileges is an admin, they may edit.
371
371
Enrolment.offering_id == self.id).one()
372
372
Store.of(enrolment).remove(enrolment)
374
def get_permissions(self, user):
374
def get_permissions(self, user, config):
376
376
if user is not None:
377
377
enrolment = self.get_enrolment(user)
378
378
if enrolment or user.admin:
379
379
perms.add('view')
380
if (enrolment and enrolment.role in (u'tutor', u'lecturer')) \
380
if enrolment and enrolment.role == u'tutor':
381
perms.add('view_project_submissions')
382
# Site-specific policy on the role of tutors
383
if config['policy']['tutors_can_enrol_students']:
385
perms.add('enrol_student')
386
if config['policy']['tutors_can_edit_worksheets']:
387
perms.add('edit_worksheets')
388
if config['policy']['tutors_can_admin_groups']:
389
perms.add('admin_groups')
383
390
if (enrolment and enrolment.role in (u'lecturer')) or user.admin:
391
perms.add('view_project_submissions')
392
perms.add('admin_groups')
393
perms.add('edit_worksheets')
394
perms.add('edit') # Can edit projects & details
384
395
perms.add('enrol') # Can see enrolment screen at all
385
396
perms.add('enrol_student') # Can enrol students
386
397
perms.add('enrol_tutor') # Can enrol tutors
469
480
return "<%s %d in %r>" % (type(self).__name__, self.id,
472
def get_permissions(self, user):
473
return self.offering.get_permissions(user)
483
def get_permissions(self, user, config):
484
return self.offering.get_permissions(user, config)
475
486
def get_groups_for_user(self, user):
476
487
"""List all groups in this offering of which the user is a member."""
577
def get_permissions(self, user):
578
return self.project_set.offering.get_permissions(user)
588
def get_permissions(self, user, config):
589
return self.project_set.offering.get_permissions(user, config)
581
592
def latest_submissions(self):
659
670
(not active_only) or (Semester.state == u'current'))
662
def get_permissions(self, user):
673
def get_permissions(self, user, config):
663
674
if user.admin or user in self.members:
664
675
return set(['submit_project'])
842
853
def __repr__(self):
843
854
return "<%s %s>" % (type(self).__name__, self.name)
845
def get_permissions(self, user):
846
return self.global_permissions(user)
856
def get_permissions(self, user, config):
857
return self.global_permissions(user, config)
849
def global_permissions(user):
860
def global_permissions(user, config):
850
861
"""Gets the set of permissions this user has over *all* exercises.
851
862
This is used to determine who may view the exercises list, and create
852
863
new exercises."""
859
870
elif u'lecturer' in set((e.role for e in user.active_enrolments)):
860
871
perms.add('edit')
861
872
perms.add('view')
862
elif u'tutor' in set((e.role for e in user.active_enrolments)):
873
elif (config['policy']['tutors_can_edit_worksheets']
874
and u'tutor' in set((e.role for e in user.active_enrolments))):
875
# Site-specific policy on the role of tutors
863
876
perms.add('edit')
864
877
perms.add('view')
926
939
store.find(WorksheetExercise,
927
940
WorksheetExercise.worksheet == self).remove()
929
def get_permissions(self, user):
930
return self.offering.get_permissions(user)
942
def get_permissions(self, user, config):
943
# Almost the same permissions as for the offering itself
944
perms = self.offering.get_permissions(user, config)
945
# However, "edit" permission is derived from the "edit_worksheets"
946
# permission of the offering
947
if 'edit_worksheets' in perms:
950
perms.discard('edit')
932
953
def get_xml(self):
933
954
"""Returns the xml of this worksheet, converts from rst if required."""
978
999
return "<%s %s in %s>" % (type(self).__name__, self.exercise.name,
979
1000
self.worksheet.identifier)
981
def get_permissions(self, user):
982
return self.worksheet.get_permissions(user)
1002
def get_permissions(self, user, config):
1003
return self.worksheet.get_permissions(user, config)
985
1006
class ExerciseSave(Storm):
1032
1053
complete = Bool()
1033
1054
active = Bool()
1035
def get_permissions(self, user):
1056
def get_permissions(self, user, config):
1036
1057
return set(['view']) if user is self.user else set()
1038
1059
class TestSuite(Storm):