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' ]
3 Réponses :
Avez-vous ajouté le backend d'authentification? L'ajout d'une authentification peut résoudre le problème travail? P> p>
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'] code>
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. P>
Donc, le problème de la base de code actuel était qu'il utilisait la méthode 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
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