
    hP                     P    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 Z
d Zd
dZy	)    )get_user_model)HttpResponseForbiddenwraps)MenuUserPermissions)viewaddeditdeleteexportc                 >   t         j                  j                  d      j                  | d      }g }i }|D ]  }|j                  j
                  xs dj                         j                         }|s<t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        d||<   |j                  s|j                  |        | j                  rut         j                  j                  d      D ]R  }|j
                  xs dj                         j                         }|s2|j                  |       ||vsHdddddd||<   T t#        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ms          ?D:\Kush\my_value_trip_django\my_value_trip\users\permissions.pybuild_session_permissionsr.      sl    		
	#	T	:  M''-2446<<> r{{+rzz*r{{+r}}-r}}-"
 ;;  & $ $$$6AMM'R..0668D$$T*//$(Tt[_os.$T* 7 4M 234M***    c           	      ,   dddddd}| j                   j                  s|S |xs dj                         j                         }| j                  j                  di       }| j                   j                  r|D ci c]  }|d c}S ||v r|j                  ||   j                  d      rdnd||   j                  d      rdnd||   j                  d      rdnd||   j                  d	      rdnd||   j                  d
      rdndd       |S c c}w )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)      r   r   r   r   r   )r&   is_authenticatedr   r   sessiongetr"   update)request	menu_codepermsr)   ks        r-   get_module_permsr:   =   s&    E <<((b'')//1I**+=rB ||  #$e1e$$$$/	:>>zJ!PQ/	:>>yI!q/	:>>zJ!PQ/	:>>|L!RS/	:>>|L!RS
 	 L %s   9
Dc                 *     t         v sJ  fd}|S )z
    Decorator for view-level guard (like your CI checks):
      @require_menu_perm('USER', 'view')
      @require_menu_perm('USER', 'add')
    c                 4     t                fd       }|S )Nc                 t    t        |       }|j                  d d      st        d      S  | g|i |S )Ncan_r   zUnauthorized Access)r:   r4   r   )r6   argskwargsr8   actionr7   	view_funcs       r-   _wrappedz6require_menu_perm.<locals>.decorator.<locals>._wrapped   sD    $Wi8E99tF8_a0,-BCCW6t6v66r/   r   )rB   rC   rA   r7   s   ` r-   	decoratorz$require_menu_perm.<locals>.decorator   s!    	y		7 
	7
 r/   )MENU_ACTIONS)r7   rA   rD   s   `` r-   require_menu_permrF   y   s      \!!! r/   N)r	   )django.contrib.authr   django.httpr   	functoolsr   users.modelsr   r   rE   r.   r:   rF    r/   r-   <module>rL      s'    . -  .:/+d xr/   