
    j2                     J    d dl mZ d dlmZmZ d dlmZ  G d de          ZdS )    )PolicyOp)batch_adapterupdate_adapter)SyncedEnforcerc                   8    e Zd ZdZd	dZd Zd Zd Zd Zd Z	dS )
DistributedEnforcerz8DistributedEnforcer wraps SyncedEnforcer for dispatcher.Nc                 2    t          j        | ||           d S )N)r   __init__)selfmodeladapters      e/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/casbin/distributed_enforcer.pyr
   zDistributedEnforcer.__init__   s    eW55555    c                    g }|D ]@}|                                                      |||          s|                    |           A|rq	 t          | j        t
                    r| j                            |||           n9# t          $ r,}| j        j	        
                    d|z              Y d}~nd}~ww xY w|                                                      |||           |dk    r^	 |                     t          j        ||           n;# t          $ r.}| j        j	        
                    d|z              |cY d}~S d}~ww xY w|S )z
        AddPolicySelf provides a method for dispatcher to add authorization rules to the current policy.
        The function returns the rules affected and error.
        zAn error occurred: NgAn exception occurred: )	get_model
has_policyappend
isinstancer   r   add_policies	Exception_eloggererrorbuild_incremental_role_linksr   
Policy_add)r   should_persistsecptyperulesno_exists_policyrulees           r   add_policy_selfz#DistributedEnforcer.add_policy_self   s     	. 	.D>>##..sE4@@ . ''--- 	@@dlM:: AL--c5%@@@ @ @ @$$%:Q%>????????@ 	%%c52BCCC#::(11(2EuN^____ ( ( ($$%>%BCCC'''''''(  s6   	6B   
B6
"B11B6)!D 
E#D>8E>Ec                    |rq	 t          | j        t                    r| j                            |||           n9# t          $ r,}| j        j                            d|z              Y d}~nd}~ww xY w|                                 	                    |||          }|dk    r^	 | 
                    t          j        ||           n;# t          $ r.}| j        j                            d|z              |cY d}~S d}~ww xY w|S )z
        remove_policy_self provides a method for dispatcher to remove policies from current policy.
        The function returns the rules affected and error.
        r   Nr   )r   r   r   remove_policyr   r   r   r   r   remove_policies_with_effectedr   r   Policy_remove)r   r   r   r    r!   r$   effecteds          r   remove_policy_selfz&DistributedEnforcer.remove_policy_self7   s6   
  	DDdlM:: BL..sE5AAA D D D$$%>%BCCCCCCCCD >>##AA#ueTT#:: 11(2H%QVWWWW      $$%>%BCCC  s3   6; 
A1"A,,A1$!C 
C>#C93C>9C>c                    |rX	 | j                             ||||           n9# t          $ r,}| j        j                            d|z              Y d}~nd}~ww xY w |                                 j        |||g|R  }|dk    r^	 |                     t          j
        ||           n;# t          $ r.}| j        j                            d|z              |cY d}~S d}~ww xY w|S )z
        remove_filtered_policy_self provides a method for dispatcher to remove an authorization
        rule from the current policy,field filters can be specified.
        The function returns the rules affected and error.
        r   Nr   )r   remove_filtered_policyr   r   r   r   r   &remove_filtered_policy_returns_effectsr   r   r)   )r   r   r   r    field_indexfield_valuesr$   effectss           r   remove_filtered_policy_selfz/DistributedEnforcer.remove_filtered_policy_selfN   s/     	DD33C\ZZZZ D D D$$%>%BCCCCCCCCD J$..""I#uVaqdpqqq#::11(2H%QXYYYY   $$%>%BCCC s2   " 
A"AA!B& &
C0#CCCc                     |rU	 | j                             d           n9# t          $ r,}| j        j                            d|z              Y d}~nd}~ww xY w|                                                                  dS )zp
        clear_policy_self provides a method for dispatcher to clear all rules from the current policy.
        Nr   )r   save_policyr   r   r   r   r   clear_policy)r   r   r$   s      r   clear_policy_selfz%DistributedEnforcer.clear_policy_selfe   s      	DD((.... D D D$$%>%BCCCCCCCCD 	%%'''''s    
A"AAc                 H   |rs	 t          | j        t                    r| j                            ||||           n:# t          $ r-}| j        j                            d|z              Y d}~dS d}~ww xY w|                                                     ||||          }|sdS |dk    rx	 | 	                    t          j        ||g           n# t          $ r}Y d}~dS d}~ww xY w	 | 	                    t          j        ||g           n# t          $ r}Y d}~dS d}~ww xY wdS )z~
        update_policy_self provides a method for dispatcher to update an authorization rule from the current policy.
        r   NFr   T)r   r   r   update_policyr   r   r   r   r   r   r   r)   r   )r   r   r   r    old_rulenew_ruler$   rule_updateds           r   update_policy_selfz&DistributedEnforcer.update_policy_selfq   ss     	dlN;; OL..sE8XNNN   $$%>%BCCCuuuuu ~~''55c5(HUU 	5#::11(2H%RZQ[\\\\   uuuuu11(2EuxjYYYY   uuuuu ts9   7< 
A3"A..A3+"C 
C#C#'"D
 

DD)NN)
__name__
__module____qualname____doc__r
   r%   r+   r2   r6   r<    r   r   r   r      sy        BB6 6 6 6     :  .  .
( 
( 
(    r   r   N)casbin.model.policy_opr   casbin.persistr   r   casbin.synced_enforcerr   r   rA   r   r   <module>rE      s    , + + + + + 8 8 8 8 8 8 8 8 1 1 1 1 1 1y y y y y. y y y y yr   