tjupt / issues

TJUPT Issues Tracker
0 stars 0 forks source link

[Feature Request] 记录用户修改密码的时间及IP #18

Closed DravenTJU closed 2 years ago

DravenTJU commented 2 years ago

防范账号交易行为

nidbCN commented 2 years ago

TJUPT 目前有没有记录密码修改记录的代码?如果有的话可能有记录日志的表,添加一下IP字段即可。不过我翻了翻我这边的测试环境和数据库,貌似是没有。 可以考虑添加一张 change_password_logs 表,包含:

  1. id (INT UNSIGNED) 用户Id(外键)
  2. change_time (DATETIME) 更改时间
  3. address (VARCHAR(40)) IP 地址 (v6最多占用39个字符) IP 地址可以取 $CURUSER["ip"],在修改密码成功那个页面时往这个表中添加一条数据。

可以参考以下 SQL 语句(未优化):

CREATE TABLE user_event_logs (
    log_id INT UNSIGNED auto_increment, 
    id INT UNSIGNED,
    operation ENUM('change_password'), 
    ip_address VARCHAR(40), 
    time DATETIME DEFAULT getdate(),

    primary key (log_id),
    foreign key (id) references users(id) on delete cascade on update cascade
);

如果以后可能有记录用户其它操作的日志的需求,可以建立这样一个 user_event_log,枚举 operation 表面用户进行了何种操作。

另外,关于这个日志的界面,是在某个用户个人信息界面下面添加一个超链接 “显示密码更改记录”(或者操作记录),然后跳转到某个页面显示。还是说在管理控制面板中添加一个 “查看用户密码更改记录”(或者操作记录),跳转页面后有表单输入用户名或ID查询(是否需要默认显示所有记录?)

nidbCN commented 2 years ago

添加记录:

INSERT INTO user_event_logs VALUES (DEFAULT, <用户Id>, "change_password", <IP地址>, DEFAULT);

删除记录:

# 是否有删除的需求?

查询记录:

SELECT log.*,users.username FROM users JOIN user_event_logs AS log ON users.id = log.id WHERE <条件>
nidbCN commented 2 years ago

写了一个查询的 API 想问一下查询的界面是单独做一个界面,在管理组面板中加超链接,还是在已有的日志(log.php) 中添加一个用户日志的 TAB? 另外,希望确认一下查询的权限等级是那一级