6 |
6 |
from xml.parsers import expat
|
7 |
7 |
|
8 |
8 |
from django.contrib import auth
|
|
9 |
from django.contrib.auth.models import Group
|
9 |
10 |
from django.core.urlresolvers import reverse
|
|
11 |
from django.http import QueryDict, HttpResponseRedirect
|
10 |
12 |
from django.template.loader import render_to_string
|
11 |
13 |
from django.utils.timezone import make_aware, now, make_naive, is_aware, get_default_timezone
|
12 |
14 |
from django.conf import settings
|
... | ... | |
14 |
16 |
import lasso
|
15 |
17 |
|
16 |
18 |
from . import app_settings
|
|
19 |
from .exceptions import RolesNotInSession
|
17 |
20 |
|
18 |
21 |
|
19 |
22 |
def create_metadata(request):
|
... | ... | |
289 |
292 |
if attribute_values & values:
|
290 |
293 |
return True
|
291 |
294 |
return False
|
|
295 |
|
|
296 |
|
|
297 |
def user_has_roles(request, roles):
|
|
298 |
if request.user.is_staff and request.session.get('is_staff'):
|
|
299 |
return True
|
|
300 |
groups = set(roles).intersection(request.user.groups.all())
|
|
301 |
if not groups:
|
|
302 |
if request.user.is_staff:
|
|
303 |
raise RolesNotInSession(('staff',))
|
|
304 |
return False
|
|
305 |
role_uuids = {getattr(group, 'role').uuid for group in groups}
|
|
306 |
if not role_uuids:
|
|
307 |
return True
|
|
308 |
if set(request.session['mellon_session']['role-slug']) & role_uuids:
|
|
309 |
return True
|
|
310 |
raise RolesNotInSession(role_uuids)
|
|
311 |
|
|
312 |
|
|
313 |
def user_has_role(request, role):
|
|
314 |
return user_has_roles(request, {role})
|
|
315 |
|
|
316 |
|
|
317 |
def get_role_request_url(request, roles):
|
|
318 |
login_url = reverse(app_settings.LOGIN_URL)
|
|
319 |
q = QueryDict(mutable=True)
|
|
320 |
q.setlist('roles', roles)
|
|
321 |
q['next'] = request.get_full_path()
|
|
322 |
return '?'.join((login_url, q.urlencode(safe='/')))
|
292 |
|
-
|