
    R7_i                         S r SSKJrJr  SSKJrJr   " S S5      r " S S5      r " S	 S
\R                  5      r
 " S S\R                  5      rg)uC   
用户相关模型

包含用户、会话、权限和角色定义
    )generate_password_hashcheck_password_hash   )dbget_beijing_nowc                   0    \ rS rSrSrSrSrSrSrSr	Sr
S	rg
)
Permission   u   权限常量定义r                   N)__name__
__module____qualname____firstlineno____doc__VIEW_PROFILEEDIT_PROFILEGENERATE_CHALLENGEVIEW_OWN_HISTORYVIEW_ALL_HISTORYADMIN__static_attributes__r       7/Users/yu22x/Desktop/ge/ctf/app/models/database/user.pyr	   r	      s&    LLEr   r	   c                   4    \ rS rSrSrSrSrSr\S 5       r	Sr
g)	Role   u   角色常量定义useradmin	moderatorc                    U [         R                  :X  a  [        R                  $ U [         R                  :X  aT  [        R                  [        R
                  -  [        R                  -  [        R                  -  [        R                  -  $ [        R                  [        R
                  -  [        R                  -  [        R                  -  $ )u   根据角色获取权限)	r    r   r	   	MODERATORr   r   r   r   r   )roles    r   get_permissionsRole.get_permissions   s     4::###T^^#++j.E.EE0013=3N3NO../ 0 ++j.E.EE0013=3N3NO Pr   r   N)r   r   r   r   r   USERr   r&   staticmethodr(   r   r   r   r   r    r       s(    DEI
P 
Pr   r    c                      \ rS rSrSrSr\R                  " \R                  SS9r	\R                  " \R                  " S5      SSS9r\R                  " \R                  " S	5      SS
9r\R                  " \R                  " S5      SSS9r\R                  " \R                  " S	5      5      r\R                  " \R                  SS9r\R                  " \R                  " S5      SS9r\R                  " \R                  \R$                  " S5      SS
9r\R                  " \R(                  5      r\R                  " \R(                  \S9r\R                  " \R(                  \\S9rS rS rS r\S 5       rSrg)User,   u   用户模型usersTprimary_key2   Funiquenullabler   r5   d   default   r"   zai_provider_configs.id)r9   onupdatec                 "    [        USS9U l        g)u   设置加密密码zpbkdf2:sha256)methodN)r   password_hashselfpasswords     r   set_passwordUser.set_passwordC   s    3H_Ur   c                 .    [        U R                  U5      $ )u   验证密码)r   r>   r?   s     r   check_passwordUser.check_passwordG   s    "4#5#5x@@r   c           	         U R                   U R                  U R                  U R                  U R                  U R
                  (       a  U R
                  R                  5       OSU R                  (       a  U R                  R                  5       OSU R                  (       a  U R                  R                  5       S.$ SS.$ )u   转换为字典N)idusernameemailavatarr'   
last_login
created_at
updated_at)	rH   rI   rJ   rK   r'   rL   	isoformatrM   rN   )r@   s    r   to_dictUser.to_dictK   s     ''ZZkkII9=$//335d9=$//335d9=$//335	
 		
 OS	
 		
r   c           
          [        U R                  S5      U R                  S5      U R                  S5      U R                  SS5      U R                  SS5      S9nS	U ;   a  UR                  U S	   5        U$ )
u   从字典创建用户rI   rJ   rK   r'   r"   	is_activeT)rI   rJ   rK   r'   rS   rA   )r-   getrB   )datar"   s     r   	from_dictUser.from_dictX   sp     XXj)((7#88H%&&)hh{D1
 d:./r   )r>   N)r   r   r   r   r   __tablename__r   ColumnIntegerrH   StringrI   r>   rJ   rK   BooleanrS   r'   
ForeignKeypreferred_system_ai_config_idDateTimerL   r   rM   rN   rB   rE   rP   r+   rV   r   r   r   r   r-   r-   ,   s5   M	2::4	0Byy2teDHIIbiinu=MIIbiinTEBEYYryy~&F		"**d3I99RYYr]F3D$&II



./%!
 2;;'J2;;@J2;;/ZJVA
  r   r-   c                   &   \ rS rSrSrSr\R                  " \R                  SS9r	\R                  " \R                  \R                  " S5      SS9r\R                  " \R                  " S	5      SSS
9r\R                  " \R                  " S5      5      r\R                  " \R                  5      r\R                  " \R"                  SS9r\R                  " \R"                  \S9r\R*                  " S\R,                  " SSS9S9r\S 5       rSrg)UserSessioni   u   用户会话模型user_sessionsTr0   zusers.idFr6   r   r3   r2   r8   r-   sessionsdynamic)lazy)backrefc                 2    [        5       nXR                  :  $ )u   检查会话是否有效)r   
expires_at)r@   current_times     r   is_validUserSession.is_validx   s     '(oo--r   r   N)r   r   r   r   r   rX   r   rY   rZ   rH   r]   user_idr[   session_token
ip_addressText
user_agentr_   ri   r   rM   relationshiprg   r"   propertyrk   r   r   r   r   ra   ra   i   s    #M	2::4	0Bii

BMM*$=NGIIbiinTEJM299R=)J277#J2;;7J2;;@J ??62::jy+QRD. .r   ra   N)r   werkzeug.securityr   r   baser   r   r	   r    Modelr-   ra   r   r   r   <module>rw      sJ    J % P P(:288 :z."(( .r   