
    Eoh                         d dl mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  ed      Z G d d      Zy)    )ListOptional)DependsHTTPExceptionstatus)OAuth2PasswordBearer)Session)get_user_permissions)get_user_role_slugs)UserReturnSchema)get_db)UserAccessLevel)get_current_userz
auth/token)tokenUrlc                   T    e Zd ZdZdee   fdZ ee       ee	      fde
dedefdZy)	PermissionGuardz?
    Permission based authorization middleware for FastAPI
    permissionsc                     || _         y )N)r   )selfr   s     X/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/role_permission/guard.py__init__zPermissionGuard.__init__   s
    &    dbcurrent_userreturnc                 H  K   t        ||j                         d {   }t        d|        t        j                  j
                  |v ryt        ||j                         d {   }| j                  D ]  }||v s y t        t        j                  d      7 7 8w)N)r   user_idzUser roles: TzInsufficient permissions)status_codedetail)r   r   printr   SUPER_ADMINvaluer
   r   r   r   HTTP_403_FORBIDDEN)r   r   r   
user_rolesuser_permissions
permissions         r   __call__zPermissionGuard.__call__   s     
 /"l>R>RSS
ZL)*&&,,
:!5\EYEY!ZZ** 	J--	 11-
 	
 T
 [s(   B"BA	B"'B (B" B" B"N)__name__
__module____qualname____doc__r   strr   r   r   r   r	   r   boolr'    r   r   r   r      sJ    'DI '
 fo)01A)B

 '
 
	
r   r   N)typingr   r   fastapir   r   r   fastapi.securityr   sqlalchemy.ormr	   4src.apps.role_permission.services.permission_servicer
   .src.apps.role_permission.services.role_servicer   "src.apps.user.schemas.user_schemasr   src.core.dependenciesr   src.utils.enumsr   src.utils.guardr   oauth2_schemer   r.   r   r   <module>r:      s:    ! 2 2 1 " U N ? ( + ,$l;
 
r   