提交 eec7ae2fb38fa0c83983e0f3c204babf950c6346

作者 qianyingz
1 个父辈 3311dd3f

add feature# 用户认证日志

... ... @@ -93,7 +93,9 @@ class DataManager(BlueprintApi):
93 93 log = OAuthLog(user_id=user.id, username=user.username,
94 94 auth_type=AuthEnum.Other.name.lower(),
95 95 message="认证成功", create_time=datetime.now(),
96   - operate_type=OperateEnum.Login)
  96 + operate_type=OperateEnum.Login,
  97 + displayname=user.displayname, ip=request.remote_addr
  98 + )
97 99 db.session.add(log)
98 100 db.session.commit()
99 101
... ... @@ -145,7 +147,9 @@ class DataManager(BlueprintApi):
145 147 log = OAuthLog(user_id=user.id, username=user.username,
146 148 auth_type=AuthEnum.Other.name.lower(),
147 149 message="注销成功", create_time=datetime.now(),
148   - operate_type=OperateEnum.Logout, token=access_token)
  150 + operate_type=OperateEnum.Logout, token=access_token,
  151 + displayname=user.displayname, ip=request.remote_addr
  152 + )
149 153 db.session.add(log)
150 154 db.session.commit()
151 155
... ... @@ -263,6 +267,7 @@ class DataManager(BlueprintApi):
263 267 @bp.route("/oa/callback", methods=["GET"])
264 268 def oa_callback():
265 269 try:
  270 + print(request.remote_addr)
266 271 client = oauth2.WebApplicationClient(
267 272 configure.OA["client_id"])
268 273
... ... @@ -341,9 +346,11 @@ class DataManager(BlueprintApi):
341 346 response.set_cookie('id_token', id_token,
342 347 max_age=configure.expiretime)
343 348
344   - log = OAuthLog(user_id=user.id, username=user_name, auth_type=AuthEnum.Other.name.lower(),
  349 + log = OAuthLog(user_id=user.id, username=user_name,
  350 + auth_type=AuthEnum.Other.name.lower(),
345 351 message="三方认证成功", create_time=datetime.now(),
346   - operate_type=OperateEnum.Login, token=access_token)
  352 + operate_type=OperateEnum.Login, token=access_token,
  353 + displayname=display_name, ip=request.remote_addr)
347 354 db.session.add(log)
348 355 db.session.commit()
349 356
... ...
1 1 # coding=utf-8
2   -#author: qianyingz
  2 +# author: qianyingz
3 3 # createtime: 2022/03/09
4   -#email: qianyingz@chinadci.com
5   -from datetime import datetime
  4 +# email: qianyingz@chinadci.com
  5 +from tokenize import String
  6 +from numpy import number
  7 +from sqlalchemy import or_
6 8 from .models import *
7 9 from app.util.component.ApiTemplate import ApiTemplate
8   -import time
  10 +import json
9 11
10 12
11 13 class Api(ApiTemplate):
... ... @@ -22,10 +24,31 @@ class Api(ApiTemplate):
22 24 # 业务逻辑
23 25 page_index = int(self.para.get("page_index", "0"))
24 26 page_size = int(self.para.get("page_size", "1000"))
25   - #name = self.para.get("name")
26   - sort_key = self.para.get("sort_key")
  27 + # name = self.para.get("name")
  28 + order_by = self.para.get("order_by")
  29 + filter_param = self.para.get("filter_param", "")
  30 + filter_param_json = {} if filter_param == "" else json.loads(
  31 + filter_param)
  32 + kw = filter_param_json["kw"] if "kw" in filter_param_json else None
  33 + type = filter_param_json["type"] if "type" in filter_param_json else None
27 34
28 35 log_query = OAuthLog.query
  36 +
  37 + if kw != None:
  38 + if isinstance(kw, str):
  39 + filter_username_query = log_query.filter(OAuthLog.username.like(
  40 + "%" + kw + "%"))
  41 + filter_display_query = log_query.filter(
  42 + OAuthLog.displayname.like("%" + kw + "%"))
  43 + log_query = filter_username_query.union(
  44 + filter_display_query)
  45 +
  46 + if type != None:
  47 + if isinstance(type, (str,int)):
  48 + log_query = log_query.filter(OAuthLog.operate_type == type)
  49 + elif isinstance(type, list):
  50 + log_query = log_query.filter(OAuthLog.operate_type.in_(type))
  51 +
29 52 log_query = log_query.order_by(OAuthLog.create_time.desc())
30 53
31 54 count = log_query.count()
... ... @@ -40,14 +63,6 @@ class Api(ApiTemplate):
40 63 "auth_type": t.auth_type,
41 64 "displayname": t.displayname}, logs))}
42 65
43   - # if id:
44   - # tmp_user = User.query.filter_by(id=id).first()
45   - # res["data"] = {"guid": tmp_user.id, "username": tmp_user.username,
46   - # "role": tmp_user.role, "company": tmp_user.company,
47   - # "position": tmp_user.position, "email": tmp_user.email,
48   - # "phone": tmp_user.phone, "display_name": tmp_user.display_name,
49   - # "status": tmp_user.status}
50   - # else:
51 66 # # 获取集合
52 67 # userLinq = User.query.order_by(User.id.desc())
53 68 # if name:
... ... @@ -83,10 +98,14 @@ class Api(ApiTemplate):
83 98 "type": "int",
84 99 "description": "条数",
85 100 "default": 1000},
86   - {"name": "sort_key",
  101 + {"name": "order_by",
87 102 "in": "query",
88 103 "type": "string",
89   - "description": "排序"}
  104 + "description": "排序"},
  105 + {"name": "filter_param",
  106 + "in": "query",
  107 + "type": "json",
  108 + "description": "过滤"}
90 109 ],
91 110 "responses": {
92 111 200: {
... ...
1   -from sqlalchemy import Column, Integer, Text, Time, ForeignKey, column
  1 +from sqlalchemy import Column, Integer, Text, Time, ForeignKey, DateTime
2 2 from app.models import db
3 3 from authlib.integrations.sqla_oauth2 import (
4 4 OAuth2ClientMixin,
... ... @@ -21,8 +21,8 @@ class User (db.Model):
21 21 position = Column(Text)
22 22 phone = Column(Text)
23 23 email = Column(Text)
24   - create_time = Column(Time)
25   - update_time = Column(Time)
  24 + create_time = Column(DateTime)
  25 + update_time = Column(DateTime)
26 26 role = Column(Text)
27 27 displayname = Column(Text, nullable=True) # 昵称
28 28 # 用户来源,默认dmap平台用户
... ... @@ -89,6 +89,6 @@ class OAuthLog(db.Model):
89 89 # 登录方式:password,三方登录
90 90 auth_type = Column(Text)
91 91 message = Column(Text) # 登录返回提示
92   - create_time = Column(Time) # 记录创建时间
  92 + create_time = Column(DateTime) # 记录创建时间
93 93 operate_type = Column(Integer, nullable=False) # 操作类型,登录,注销
94 94 token = Column(Text)
... ...
注册登录 后发表评论