File: gmAccessPermissionWidgets.py

package info (click to toggle)
gnumed-client 1.4.12%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 164,192 kB
  • ctags: 168,531
  • sloc: python: 88,281; sh: 765; makefile: 37
file content (68 lines) | stat: -rw-r--r-- 2,076 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""GNUmed access permissions/violations widgets."""
#=========================================================================
__author__  = "K. Hilbert <Karsten.Hilbert@gmx.net>"
__license__ = "GPL v2 or later (details at http://www.gnu.org)"

import logging
#import functools


import wx


from Gnumed.business import gmStaff

from Gnumed.wxpython import gmGuiHelpers


_log = logging.getLogger('gm.perms')

#=========================================================================
_known_roles = [
	u'public access',
	u'non-clinical access',
	u'limited clinical access',		# currently not in use
	u'full clinical access',
	u'admin'						# currently not in use
]

_curr_staff = gmStaff.gmCurrentProvider()

#-------------------------------------------------------------------------
def verify_minimum_required_role(minimum_role, activity=None, return_value_on_failure=None, fail_silently=False):

	if activity is None:
		activity = _('generic activity')

	#---------
	def _inner_verify_minimum_required_role(original_function):

		#---------
		#@functools.wraps(original_function)
		def _func_decorated_with_required_role_checking(*args, **kwargs):
			if _known_roles.index(minimum_role) > _known_roles.index(_curr_staff['role']):
				_log.info('access denied: %s', activity)
				_log.debug('required role: %s', minimum_role)
				_log.debug('current role: %s (<%s>)', _curr_staff['l10n_role'], _curr_staff['role'])
				_log.debug('current user: %s (<%s>)', _curr_staff['short_alias'], _curr_staff['db_user'])
				wx.EndBusyCursor()
				if fail_silently:
					return return_value_on_failure
				gmGuiHelpers.gm_show_error (
					aTitle = _('Access denied'),
					aMessage = _(
						'Your account is not set up to access this part of GNUmed:\n'
						'\n'
						'  [%s]'
					) % activity
				)
				return return_value_on_failure
			return original_function(*args, **kwargs)
		#---------

		return _func_decorated_with_required_role_checking
	#---------

	return _inner_verify_minimum_required_role

#=========================================================================