"""请求前中间件
获取当前请求的url地址
拿到这个用户的id
orm 找到这个用户
获取这个用户的所有角色
获取这个用户的所有权限
判定 当前请求地址 在不在这个些权限内
不在就 返回 make_response('你没权限')
"""
@app.before_request
def check_power():
# 判断需要校验的接口
if str(request.url) in ['/user/register','/user/login']:
return None
# 获取传递用户的id
uid = request.args.get('uid') or g.get('uid')
# 获取用户的信息
user = User.query.get(uid)
# 获取用户的全部权限,组成一个列表
powers = sum([role.power for role in user.role_id], [])
# 拼接用户权限的请求方式,请求路由
items = [item.url + ':' + item.method for item in powers]
# 拼接传递的请求方式,请求路由
power_list = str(request.url_rule) + ':' + request.method.lower()
# 判断校验的请求 是否在权限里
if power_list not in items:
return make_response('没有这个权限')
# g是上下文管理工具
@app.after_request
def add_log(response):
try:
uid = request.args.get('u_id') or g.get('uid')
if not uid:
raise KeyError
except Exception as e:
print(request.url,e)
return response
log = User_log(user_id=uid,url=request.url,methods=request.method,create_time=arrow.get().int_timestamp)
db.session.add(log)
db.session.commit()
return response
Flask 简单实现一些用户认证
最新推荐文章于 2023-08-31 13:27:35 发布