1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-06-21 01:48:21 +02:00

Check permissions per request instead of per user

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
This commit is contained in:
2021-06-15 14:40:32 +02:00
parent 5e9f36ef1a
commit ea092803d7
25 changed files with 207 additions and 203 deletions

View File

@ -2,13 +2,10 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from threading import local
from typing import Optional
from django.conf import settings
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.contrib.sessions.backends.db import SessionStore
from django.http import HttpRequest
REQUEST_ATTR_NAME = getattr(settings, 'LOCAL_REQUEST_ATTR_NAME', '_current_request')
@ -19,43 +16,10 @@ def _set_current_request(request=None):
setattr(_thread_locals, REQUEST_ATTR_NAME, request)
def get_current_request() -> Optional[HttpRequest]:
def get_current_request():
return getattr(_thread_locals, REQUEST_ATTR_NAME, None)
def get_current_user() -> Optional[User]:
request = get_current_request()
if request is None:
return None
return request.user
def get_current_session() -> Optional[SessionStore]:
request = get_current_request()
if request is None:
return None
return request.session
def get_current_ip() -> Optional[str]:
request = get_current_request()
if request is None:
return None
elif 'HTTP_X_REAL_IP' in request.META:
return request.META.get('HTTP_X_REAL_IP')
elif 'HTTP_X_FORWARDED_FOR' in request.META:
return request.META.get('HTTP_X_FORWARDED_FOR').split(', ')[0]
return request.META.get('REMOTE_ADDR')
def get_current_authenticated_user():
current_user = get_current_user()
if not current_user or not current_user.is_authenticated:
return None
return current_user
class SessionMiddleware(object):
"""
This middleware get the current user with his or her IP address on each request.