Files
pear-admin-flask/applications/dev/user.py
T
2023-02-10 21:29:39 +08:00

161 lines
4.9 KiB
Python

"""
集成了对 Pear Admin Flask 的用户操作,并给了相对应的示例。
调用示例::
from applications import dev
dev.user.login_required # 用户是否登录
dev.user.current_user # 当前登录用户
dev.user.authorize("XXX", log=True) # 用户是否有此权限
"""
from applications.extensions import db
from applications.models import Role
from applications.models import User
def filter_by(**kwargs):
"""
用于在用户数据中查询用户信息,可以通过用户名、用户id等进行检索。(建议使用id检索)
内部采用的是使用 User.query.filter_by(**kwargs) 进行数据库查询
注意:此函数返回的结果为构造的 SQL的查询字符串 ,以 user_filter 命名,但是并不是用户数据。
返回的字段如下::
id username password_hash create_at update_at
enable realname remark avatar dept_id
具体参考 applications/models/admin_user.py 中的模型定义。
参考调用如下::
userinfo = dev.user.filter_by(username='zsq').first() # 查询符合要求的第一个用户
print(userinfo.realname) # 获取用户真实名字
:param kwargs: 查询参数
:return: 用户数据SQL的查询字符串
"""
return User.query.filter_by(**kwargs)
def update(user_filter, data):
"""
更新用户数据,修改将直接保存到数据库中。
注意:更新用户角色(role)请使用 dev.user.update_role() 函数。
可更新的字段如下::
id username password_hash create_at update_at
enable realname remark avatar dept_id
具体参考 applications/models/admin_user.py 中的模型定义。
参考调用如下::
user_filter = dev.user.filter_by(id=0) # 获取指定用户ID的用户,注意不要使用会引起歧义的查询条件,否则会匹配到多个用户。
dev.user.update(user_filter, {username: 'zsq1314'}) # 更新其用户名
:param user_filter: dev.user.filter_by() 的结果。
:param data: 要更新的数据,必须是字典。
:return: None
"""
user_filter.update(data)
db.session.commit()
def update_role(user_filter, roleIds):
"""
更新用户角色,修改将直接保存到数据库中。
参考调用如下::
user_filter = dev.user.filter_by(username='zsq') # 获取符合要求的第一个用户
roleIds = []
roleIds.append(dev.role.filter_by(code='admin').first().id) # 管理员角色ID
roleIds.append(dev.role.filter_by(code='common').first().id) # 普通用户角色ID
dev.user.update_role(user_filter, roleIds)
:param user_filter: dev.user.filter_by() 的结果。
:param roleIds: 要更新的角色ID,作为列表传入。
:return: None
"""
user_filter.first().role = Role.query.filter(Role.id.in_(roleIds)).all()
db.session.commit()
def get_role(user_filter):
"""
获取用户的所有角色ID,将会返回一个整数列表。
:param user_filter: dev.user.filter_by() 的结果。
:return: 列表 (roleIds)
"""
checked_roles = []
for r in user_filter.first().role:
checked_roles.append(r.id)
return checked_roles
def set_password(user_filter, password):
"""
设置用户密码,此函数不会验证用户原始密码哈希值,直接写入新密码哈希值。
参考调用如下::
user_filter = dev.user.filter_by(username='zsq') # 获取符合要求的用户
dev.user.set_password(user_filter, 'zsq1314') # 设置密码
:param user_filter: dev.user.filter_by() 的结果。
:param password: 新密码。
:return: None
"""
user = user_filter.first()
user.set_password(password)
db.session.add(user)
db.session.commit()
def add(username, realname, password, roleIds):
"""
添加一个新用户。函数会判断用户名是否已存在,存在返回 False ,成功返回用户数据(userinfo)。此函数会直接写入数据库。
注意:此函数创建出来的用户默认是禁用的,可以使用 enable 启用。
:param username: 新用户名
:param realname: 真实名字
:param password: 密码字符串
:param roleIds: 角色id列表,如 [1, 2],角色id具体查看 dev.role.get_all() 函数。
:return: 是否成功
"""
if bool(User.query.filter_by(username=username).count()):
return False
user = User(username=username, realname=realname)
user.set_password(password)
db.session.add(user)
roles = Role.query.filter(Role.id.in_(roleIds)).all()
for r in roles:
user.role.append(r)
db.session.commit()
return user
def delete(user_filter):
"""
删除一个用户。此函数立刻写入数据库。
:param user_filter: dev.user.filter_by() 的结果。
:return: 是否成功
"""
user = user_filter.first()
user.role = []
res = user_filter.delete()
db.session.commit()
return res