
    :>j                        S r SSKrSSKrSSKrSSKrSSKJr   SSKJrJr  \R                  R                  \R                  R                  \5      5      r\R                  R#                  \S5      r/ SQrS	\S
\4S jrS	\S\S
\4S jrS rS rS\4S jrS\S	\4S jrS2S\S	\S\S\S\4
S jjrS rS\4S jrS\S\4S jr\ S:X  Ga  \!" \RD                  5      S:  aB  \
" S5        \
" S 5        \
" S!5        \
" S"5        \
" S#5        \
" S$5        \R                  " S5        \RD                  S   r#\#S%:X  a  \" 5         g\#S&:X  a  \!" \RD                  5      S':  a  \
" S(5        \R                  " S5        \RD                  S   r$\RD                  S)   r%\RD                  S*   r&\!" \RD                  5      S':  a  \RD                  S'   OSr'\!" \RD                  5      S+:  a  \RD                  S+   OSr(\" \$\%\&\'\(5        g\#S,:X  a  \" 5         g\#S-:X  aF  \!" \RD                  5      S):  a  \
" S.5        \R                  " S5        \" \RD                  S   5        g\#S/:X  aT  \!" \RD                  5      S*:  a  \
" S05        \R                  " S5        \" \RD                  S   \RD                  S)   5        g\
" S1\# 35        \R                  " S5        gg! \	 a    \
" S5        \R                  " S5         GNf = f)3uv  
用户管理工具
- 用户数据存储在 users.xlsx (Excel)
- 密码使用 SHA256 哈希存储
- 支持命令行操作：add / list / delete / reset-pwd

用法：
  python user_manager.py add <username> <password> <display_name> [role]
  python user_manager.py list
  python user_manager.py delete <username>
  python user_manager.py reset-pwd <username> <new_password>
    N)datetime)Workbookload_workbooku+   请先安装 openpyxl: pip install openpyxl   z
users.xlsx)idusernamepassworddisplay_namephonerole
created_atr	   returnc                 n    Sn[         R                  " X-   R                  5       5      R                  5       $ )u   SHA256 密码哈希zhengfangyuan2026)hashlibsha256encode	hexdigest)r	   salts     %D:\AI-Ad-Agent\portal\user_manager.pyhash_passwordr       s*    D>>8?2245??AA    hashedc                     [        U 5      U:H  $ )u   验证密码)r   )r	   r   s     r   verify_passwordr   &   s    "f,,r   c                     [         R                  R                  [        5      (       d  [	        5       n U R
                  nSUl        UR                  [        5        UR                  [        [        R                  " 5       5      SS S[        S5      SSS[        R                  " 5       R                  S5      /5        U R!                  [        5        [#        S	[         35        [#        S
5        gg)u   初始化 Excel 数据库usersN   adminadmin123u	   管理员 %Y-%m-%d %H:%M:%Su   已创建用户数据库: u'   默认管理员账号: admin / admin123TF)ospathexistsDB_FILEr   activetitleappendCOLUMNSstruuiduuid4r   r   nowstrftimesaveprint)wbwss     r   init_dbr4   +   s    77>>'""ZYY
		'
		

bq!*%LLN##$78
 	 	*7)4578r   c                  t   [         R                  R                  [        5      (       d
  [	        5         [        [        5      n U R                  n/ nUR                  SSS9 HD  nUS   (       d  M  [        [        [        U5      5      nSU;  a  SUS'   UR                  U5        MF     U R                  5         U$ )u   获取所有用户   T)min_rowvalues_onlyr   r   r!   )r#   r$   r%   r&   r4   r   r'   	iter_rowsdictzipr*   r)   close)r2   r3   r   rowus        r   get_all_usersr?   C   s    77>>'""		w	B	BE||A4|8q66S#&'Aa'
LLO 9 HHJLr   r   c                 D    [        5       nU H  nUS   U :X  d  M  Us  $    g)u   查找用户r   N)r?   )r   r   r>   s      r   	find_userrA   U   s)    OEZ=H$H  r   c                     [        U 5      nU(       a3  [        XS   5      (       a   US   US   UR                  SS5      US   S.$ g)	uA   验证用户登录，成功返回用户信息，失败返回 Noner	   r   r
   r   r!   r   )r   r
   r   r   N)rA   r   get)r   r	   users      r   verify_userrE   ^   sR    XDz*:;;Z( 0XXgr*L	
 	
 r   r!   rD   r
   r   r   c                    [        U 5      (       a  [        SU  S35        g[        R                  R	                  [
        5      (       d
  [        5         [        [
        5      nUR                  nUR                  [        [        R                  " 5       5      SS U [        U5      UUU[        R                  " 5       R!                  S5      /5        UR#                  [
        5        UR%                  5         [        SU  SU S	U 35        g
)u   添加用户   错误: 用户 'u   ' 已存在FNr   r"      用户 'z' (u   ) 添加成功，角色: T)rA   r1   r#   r$   r%   r&   r4   r   r'   r)   r+   r,   r-   r   r   r.   r/   r0   r<   )r   r	   r
   r   r   r2   r3   s          r   add_userrI   k   s     
+6777>>'""		w	B	BIIDJJL"1h 34  GGGHHJ	HXJc,/H
OPr   c                  D   [        5       n U (       d  [        S5        g[        SSS SSS SS	S
 SSS SS 3
5        [        S5        U  H<  n[        US   S SUS   S SUR                  SS5      S
 SUS   S SUS    3	5        M>     [        S[        U 5       S35        g)u   列出所有用户u   暂无用户N
u	   用户名z<16 u   显示名称z<12u	   手机号z<14u   角色z<10u   创建时间zN------------------------------------------------------------------------------r   r
   r   r!   r   r   u   
共 u
    个用户)r?   r1   rC   len)r   r>   s     r   
list_usersrN      s    OEn	B{3q 4Ak#5FaQT~UVWeVf
gh	(O:s#1Q~%6s$;1QUU72=Ns<SSTUVW]U^_bTccdefgsetduvw 	F3u:,j
)*r   c                 x   U S:X  a  [        S5        g[        U 5      (       d  [        SU  S35        g[        [        5      nUR                  nUR                  SS9 H6  nUS   R                  U :X  d  M  UR                  US	   R                  5          O   UR                  [        5        UR                  5         [        R                  R                  [        S
U  S35      n[        R                  R                  U5      (       a$  [        R                   " U5        [        SU 35        [        SU  S35        g)u   删除用户r   u#   错误: 不能删除管理员账号FrG      ' 不存在r6   r7   r   r   dataz_records.jsonu   已删除用户数据文件: rH   u   ' 已删除T)r1   rA   r   r&   r'   r9   valuedelete_rowsr=   r0   r<   r#   r$   joinBASE_DIRr%   remove)r   r2   r3   r=   records_files        r   delete_userrY      s    734X 
+67	w	B	B||A|&q6<<8#NN3q6::& ' GGGHHJ 77<<&XJm2LML	ww~~l##
		,-l^<=	HXJk
*+r   new_passwordc                 b   [        U 5      nU(       d  [        SU  S35        g[        [        5      nUR                  nUR                  SS9 H+  nUS   R                  U :X  d  M  [        U5      US   l          O   UR                  [        5        UR                  5         [        SU  S35        g	)
u   重置密码rG   rP   Fr6   rQ   r   rH   u   ' 密码已重置T)
rA   r1   r   r&   r'   r9   rS   r   r0   r<   )r   rZ   rD   r2   r3   r=   s         r   reset_passwordr\      s    XD 
+67	w	B	B||A|&q6<<8#(6CFL ' GGGHHJ	HXJ/
01r   __main__r6   u   用法:uI     python user_manager.py init                        # 初始化数据库uR     python user_manager.py add <用户名> <密码> <显示名> [手机号] [角色]uI     python user_manager.py list                        # 列出所有用户uG     python user_manager.py delete <用户名>              # 删除用户uJ     python user_manager.py reset-pwd <用户名> <新密码>  # 重置密码initadd   uX   用法: python user_manager.py add <用户名> <密码> <显示名> [手机号] [角色]         listdeleteu1   用法: python user_manager.py delete <用户名>z	reset-pwdu@   用法: python user_manager.py reset-pwd <用户名> <新密码>u   未知命令: )r!   rD   ))__doc__r   r#   sysr,   r   openpyxlr   r   ImportErrorr1   exitr$   dirnameabspath__file__rV   rU   r&   r*   r+   r   boolr   r4   r?   rA   rE   rI   rN   rY   r\   __name__rM   argvcmdr   r	   r
   r   r    r   r   <module>rs      s    	 
  0
 77??277??845
'',,x
.
WBC BC B-c -3 -4 -
0$ 
# 
 
s c  S UX 4+# :S  & z
388}qiYZbcYZWXZ[
((1+C
f}		sxx=1lmHHQK88A;88A;xx{"388}q0b!#((ma/sxx{V8\5$?		sxx=1EFHHQKCHHQK 		sxx=1TUHHQKsxx{CHHQK0se$%M [  	
78HHQKs   K  K54K5