o
    >hP                     @   sV   d dl mZ d dlmZ d dlmZ d dlmZmZ dZ	dd Z
dd	 ZdddZdS )    )get_user_model)HttpResponseForbiddenwraps)MenuUserPermissions)viewaddeditdeleteexportc                 C   s   t jdj| dd}g }i }|D ]0}|jjpd  }|s qt|j	t|j
t|jt|jt|jd||< |j	rA|| q| jrmtjjddD ] }|jpRd  }|rl|| ||vrldddddd||< qLttt|}||fS )a
  
    Called on login (or whenever you want to refresh).
    Creates two session objects:
      - request.session['assigned_menu']  -> list of allowed menu_action codes
      - request.session['menu_permissions'] -> dict keyed by menu_action with action booleans
    ref_menuT)ref_userref_menu__menu_status can_viewcan_addcan_edit
can_delete
can_export)menu_status)r   objectsselect_relatedfilterr   menu_actionupperstripboolr   r   r   r   r   appendis_superuserr   sortedlistset)userperms_qsassigned_menumenu_permissionsupcodem r+   O/var/www/html/myvaluetrips/my_value_trip_new/my_value_trip/users/permissions.pybuild_session_permissions   s>   




r-   c              	   C   s   dddddd}| j js|S |pd  }| jdi }| j jr(dd |D S ||v rd||| dr7dnd|| d	rAdnd|| d
rKdnd|| drUdnd|| dr_dndd |S )z
    Return dict with can_* flags for a given menu code (like 'USER').
    Matches your old behavior (only can_view, can_add, etc.).
    r   r   r   r'   c                 S   s   i | ]}|d qS )   r+   ).0kr+   r+   r,   
<dictcomp>R   s    z$get_module_perms.<locals>.<dictcomp>r   r.   r   r   r   r   )r$   is_authenticatedr   r   sessiongetr    update)request	menu_codepermsr'   r+   r+   r,   get_module_perms=   s*   r9   r   c                    s    t v sJ  fdd}|S )z
    Decorator for view-level guard (like your CI checks):
      @require_menu_perm('USER', 'view')
      @require_menu_perm('USER', 'add')
    c                    s   t   fdd}|S )Nc                    s:   t | }|d  dstdS | g|R i |S )Ncan_r   zUnauthorized Access)r9   r4   r   )r6   argskwargsr8   )actionr7   	view_funcr+   r,   _wrapped   s   
z6require_menu_perm.<locals>.decorator.<locals>._wrappedr   )r>   r?   r=   r7   )r>   r,   	decorator   s   z$require_menu_perm.<locals>.decorator)MENU_ACTIONS)r7   r=   rA   r+   r@   r,   require_menu_permy   s   rC   N)r   )django.contrib.authr   django.httpr   	functoolsr   users.modelsr   r   rB   r-   r9   rC   r+   r+   r+   r,   <module>   s   2<