提交 eec7ae2fb38fa0c83983e0f3c204babf950c6346

作者 qianyingz
1 个父辈 3311dd3f

add feature# 用户认证日志

@@ -93,7 +93,9 @@ class DataManager(BlueprintApi): @@ -93,7 +93,9 @@ class DataManager(BlueprintApi):
93 log = OAuthLog(user_id=user.id, username=user.username, 93 log = OAuthLog(user_id=user.id, username=user.username,
94 auth_type=AuthEnum.Other.name.lower(), 94 auth_type=AuthEnum.Other.name.lower(),
95 message="认证成功", create_time=datetime.now(), 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 db.session.add(log) 99 db.session.add(log)
98 db.session.commit() 100 db.session.commit()
99 101
@@ -145,7 +147,9 @@ class DataManager(BlueprintApi): @@ -145,7 +147,9 @@ class DataManager(BlueprintApi):
145 log = OAuthLog(user_id=user.id, username=user.username, 147 log = OAuthLog(user_id=user.id, username=user.username,
146 auth_type=AuthEnum.Other.name.lower(), 148 auth_type=AuthEnum.Other.name.lower(),
147 message="注销成功", create_time=datetime.now(), 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 db.session.add(log) 153 db.session.add(log)
150 db.session.commit() 154 db.session.commit()
151 155
@@ -263,6 +267,7 @@ class DataManager(BlueprintApi): @@ -263,6 +267,7 @@ class DataManager(BlueprintApi):
263 @bp.route("/oa/callback", methods=["GET"]) 267 @bp.route("/oa/callback", methods=["GET"])
264 def oa_callback(): 268 def oa_callback():
265 try: 269 try:
  270 + print(request.remote_addr)
266 client = oauth2.WebApplicationClient( 271 client = oauth2.WebApplicationClient(
267 configure.OA["client_id"]) 272 configure.OA["client_id"])
268 273
@@ -341,9 +346,11 @@ class DataManager(BlueprintApi): @@ -341,9 +346,11 @@ class DataManager(BlueprintApi):
341 response.set_cookie('id_token', id_token, 346 response.set_cookie('id_token', id_token,
342 max_age=configure.expiretime) 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 message="三方认证成功", create_time=datetime.now(), 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 db.session.add(log) 354 db.session.add(log)
348 db.session.commit() 355 db.session.commit()
349 356
1 # coding=utf-8 1 # coding=utf-8
2 -#author: qianyingz 2 +# author: qianyingz
3 # createtime: 2022/03/09 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 from .models import * 8 from .models import *
7 from app.util.component.ApiTemplate import ApiTemplate 9 from app.util.component.ApiTemplate import ApiTemplate
8 -import time 10 +import json
9 11
10 12
11 class Api(ApiTemplate): 13 class Api(ApiTemplate):
@@ -22,10 +24,31 @@ class Api(ApiTemplate): @@ -22,10 +24,31 @@ class Api(ApiTemplate):
22 # 业务逻辑 24 # 业务逻辑
23 page_index = int(self.para.get("page_index", "0")) 25 page_index = int(self.para.get("page_index", "0"))
24 page_size = int(self.para.get("page_size", "1000")) 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 log_query = OAuthLog.query 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 log_query = log_query.order_by(OAuthLog.create_time.desc()) 52 log_query = log_query.order_by(OAuthLog.create_time.desc())
30 53
31 count = log_query.count() 54 count = log_query.count()
@@ -40,14 +63,6 @@ class Api(ApiTemplate): @@ -40,14 +63,6 @@ class Api(ApiTemplate):
40 "auth_type": t.auth_type, 63 "auth_type": t.auth_type,
41 "displayname": t.displayname}, logs))} 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 # userLinq = User.query.order_by(User.id.desc()) 67 # userLinq = User.query.order_by(User.id.desc())
53 # if name: 68 # if name:
@@ -83,10 +98,14 @@ class Api(ApiTemplate): @@ -83,10 +98,14 @@ class Api(ApiTemplate):
83 "type": "int", 98 "type": "int",
84 "description": "条数", 99 "description": "条数",
85 "default": 1000}, 100 "default": 1000},
86 - {"name": "sort_key", 101 + {"name": "order_by",
87 "in": "query", 102 "in": "query",
88 "type": "string", 103 "type": "string",
89 - "description": "排序"} 104 + "description": "排序"},
  105 + {"name": "filter_param",
  106 + "in": "query",
  107 + "type": "json",
  108 + "description": "过滤"}
90 ], 109 ],
91 "responses": { 110 "responses": {
92 200: { 111 200: {
1 -from sqlalchemy import Column, Integer, Text, Time, ForeignKey, column 1 +from sqlalchemy import Column, Integer, Text, Time, ForeignKey, DateTime
2 from app.models import db 2 from app.models import db
3 from authlib.integrations.sqla_oauth2 import ( 3 from authlib.integrations.sqla_oauth2 import (
4 OAuth2ClientMixin, 4 OAuth2ClientMixin,
@@ -21,8 +21,8 @@ class User (db.Model): @@ -21,8 +21,8 @@ class User (db.Model):
21 position = Column(Text) 21 position = Column(Text)
22 phone = Column(Text) 22 phone = Column(Text)
23 email = Column(Text) 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 role = Column(Text) 26 role = Column(Text)
27 displayname = Column(Text, nullable=True) # 昵称 27 displayname = Column(Text, nullable=True) # 昵称
28 # 用户来源,默认dmap平台用户 28 # 用户来源,默认dmap平台用户
@@ -89,6 +89,6 @@ class OAuthLog(db.Model): @@ -89,6 +89,6 @@ class OAuthLog(db.Model):
89 # 登录方式:password,三方登录 89 # 登录方式:password,三方登录
90 auth_type = Column(Text) 90 auth_type = Column(Text)
91 message = Column(Text) # 登录返回提示 91 message = Column(Text) # 登录返回提示
92 - create_time = Column(Time) # 记录创建时间 92 + create_time = Column(DateTime) # 记录创建时间
93 operate_type = Column(Integer, nullable=False) # 操作类型,登录,注销 93 operate_type = Column(Integer, nullable=False) # 操作类型,登录,注销
94 token = Column(Text) 94 token = Column(Text)
注册登录 后发表评论