0
votes

Comment définir différents fichiers URLS.PY basés sur l'utilisateur à Django

J'ai deux fichiers d'URL dans mon projet de base: urls.py admin_urls.py

Selon l'utilisateur demandé, différentes URL seront accessibles. Et les utilisateurs sont différenciés en fonction de la demande. J'ai créé un fichier middleware contenant: p>

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'oauth2_provider.middleware.OAuth2TokenMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'hyp_users_svc.services.versioned.v1.middlewares.url_handler.URLHandlerMiddleware',  ## my url middleware
    'hyp_users_svc.services.versioned.v1.middlewares.error_handler.ErrorResponseMiddleware'
]


2 commentaires

Peut-être devriez-vous essayer django redirects docs.djangoproject.com/fr/3.1/RF / contributions / redirige au lieu de manipuler cela avec un middleware personnalisé.


Cela ne fonctionnerait pas dans mon cas car je ne veux pas rediriger l'utilisateur. Je veux juste donner 404 si cette URL n'existe pas pour cet utilisateur


3 Réponses :


0
votes

Avez-vous ajouté le backend d'authentification? L'ajout d'une authentification peut résoudre le problème xxx

travail?


1 commentaires

Oui, j'ai déjà une authentification ajoutée: authentification_backends = ['oauth2_provider.backend.oauthewackend', # Déterminez si vous souhaitez accéder à l'administrateur 'django.contrib.auth.backends.modelbackend']



0
votes

L'authentification et l'autorisation sont deux concepts différents. Ce que vous cherchez, c'est une autorisation basée sur un rôle d'utilisateur. Un décorateur de connexion personnalisé qui prend cela en compte et rediriger l'utilisateur en fonction de son rôle devrait le faire.


0 commentaires

0
votes

Donc, le problème de la base de code actuel était qu'il utilisait la méthode appel forte> qui renvoie la réponse de la demande. Au lieu de cela, j'ai dû mettre à jour ma méthode Process_Request, qui traitera simplement le code Befoe la demande.

class URLHandlerMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # for unprotected calls
        if 'saleschannel' in request.headers:
            if request.headers['saleschannel'] == 'a510b9':
                set_urlconf('hyp_users_svc.admin_urls')
                request.urlconf = 'hyp_users_svc.admin_urls'

            else:
                request.urlconf = 'hyp_users_svc.urls'
        return None


0 commentaires