wip(semantic):数据模型语义化
This commit is contained in:
@@ -4,7 +4,7 @@ from applications.api import api_bp
|
|||||||
from applications.common.utils.http import success_api, fail_api
|
from applications.common.utils.http import success_api, fail_api
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models import Dept, User
|
from applications.models import CompanyDepartment, CompanyUser
|
||||||
from flask_restful import marshal, reqparse
|
from flask_restful import marshal, reqparse
|
||||||
from applications.common.serialization import dept_fields
|
from applications.common.serialization import dept_fields
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ class Department(Resource):
|
|||||||
|
|
||||||
@authorize("admin:dept:main", log=True)
|
@authorize("admin:dept:main", log=True)
|
||||||
def get(self):
|
def get(self):
|
||||||
dept_data = Dept.query.order_by(Dept.sort).all()
|
dept_data = CompanyDepartment.query.order_by(CompanyDepartment.sort).all()
|
||||||
# TODO dtree 需要返回状态信息
|
# TODO dtree 需要返回状态信息
|
||||||
res = {
|
res = {
|
||||||
"status": {"code": 200, "message": "默认"},
|
"status": {"code": 200, "message": "默认"},
|
||||||
@@ -38,7 +38,7 @@ class Department(Resource):
|
|||||||
|
|
||||||
res = parser.parse_args()
|
res = parser.parse_args()
|
||||||
|
|
||||||
dept = Dept(
|
dept = CompanyDepartment(
|
||||||
parent_id=res.parent_id,
|
parent_id=res.parent_id,
|
||||||
dept_name=res.dept_name,
|
dept_name=res.dept_name,
|
||||||
sort=res.sort,
|
sort=res.sort,
|
||||||
@@ -58,7 +58,7 @@ class Department(Resource):
|
|||||||
class DeptURD(Resource):
|
class DeptURD(Resource):
|
||||||
@authorize("admin:dept:edit", log=True)
|
@authorize("admin:dept:edit", log=True)
|
||||||
def get(self, dept_id):
|
def get(self, dept_id):
|
||||||
dept = Dept.query.filter_by(id=dept_id).first()
|
dept = CompanyDepartment.query.filter_by(id=dept_id).first()
|
||||||
dept_data = {
|
dept_data = {
|
||||||
'id': dept.id,
|
'id': dept.id,
|
||||||
'dept_name': dept.dept_name,
|
'dept_name': dept.dept_name,
|
||||||
@@ -93,7 +93,7 @@ class DeptURD(Resource):
|
|||||||
"status": res.status,
|
"status": res.status,
|
||||||
"address": res.address
|
"address": res.address
|
||||||
}
|
}
|
||||||
res = Dept.query.filter_by(id=dept_id).update(data)
|
res = CompanyDepartment.query.filter_by(id=dept_id).update(data)
|
||||||
if not res:
|
if not res:
|
||||||
return fail_api(msg="更新失败")
|
return fail_api(msg="更新失败")
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@@ -101,8 +101,8 @@ class DeptURD(Resource):
|
|||||||
|
|
||||||
@authorize("admin:dept:remove", log=True)
|
@authorize("admin:dept:remove", log=True)
|
||||||
def delete(self, dept_id):
|
def delete(self, dept_id):
|
||||||
ret = Dept.query.filter_by(id=dept_id).delete()
|
ret = CompanyDepartment.query.filter_by(id=dept_id).delete()
|
||||||
User.query.filter_by(dept_id=dept_id).update({"dept_id": None})
|
CompanyUser.query.filter_by(dept_id=dept_id).update({"dept_id": None})
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
if ret:
|
if ret:
|
||||||
return success_api(msg="删除成功")
|
return success_api(msg="删除成功")
|
||||||
@@ -113,7 +113,7 @@ class DeptURD(Resource):
|
|||||||
class DeptEnable(Resource):
|
class DeptEnable(Resource):
|
||||||
@authorize("admin:dept:edit", log=True)
|
@authorize("admin:dept:edit", log=True)
|
||||||
def put(self, dept_id):
|
def put(self, dept_id):
|
||||||
d = Dept.query.get(dept_id)
|
d = CompanyDepartment.query.get(dept_id)
|
||||||
if d:
|
if d:
|
||||||
d.status = not d.status
|
d.status = not d.status
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from applications.common.utils.http import fail_api, success_api, table_api
|
|||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.common.utils.upload import upload_one, delete_photo_by_id
|
from applications.common.utils.upload import upload_one, delete_photo_by_id
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models import Photo
|
from applications.models import FilePhoto
|
||||||
|
|
||||||
file_api = Api(api_bp, prefix='/file')
|
file_api = Api(api_bp, prefix='/file')
|
||||||
|
|
||||||
@@ -22,8 +22,8 @@ class FilePhotos(Resource):
|
|||||||
def get(self):
|
def get(self):
|
||||||
page = request.args.get('page', type=int)
|
page = request.args.get('page', type=int)
|
||||||
limit = request.args.get('limit', type=int)
|
limit = request.args.get('limit', type=int)
|
||||||
photo_paginate = Photo.query.order_by(desc(Photo.create_time)).paginate(page=page, per_page=limit,
|
photo_paginate = FilePhoto.query.order_by(desc(FilePhoto.create_at)).paginate(page=page, per_page=limit,
|
||||||
error_out=False)
|
error_out=False)
|
||||||
data = marshal(photo_paginate.items, photo_fields)
|
data = marshal(photo_paginate.items, photo_fields)
|
||||||
return table_api(data=data, count=photo_paginate.total, code=0)
|
return table_api(data=data, count=photo_paginate.total, code=0)
|
||||||
|
|
||||||
@@ -49,11 +49,11 @@ class FilePhotos(Resource):
|
|||||||
"""图片批量删除"""
|
"""图片批量删除"""
|
||||||
# TODO bugs 图片删除失败
|
# TODO bugs 图片删除失败
|
||||||
ids = request.form.getlist('ids[]')
|
ids = request.form.getlist('ids[]')
|
||||||
photo_name = Photo.query.filter(Photo.id.in_(ids)).all()
|
photo_name = FilePhoto.query.filter(FilePhoto.id.in_(ids)).all()
|
||||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||||
for p in photo_name:
|
for p in photo_name:
|
||||||
os.remove(upload_url + '/' + p.name)
|
os.remove(upload_url + '/' + p.name)
|
||||||
photo = Photo.query.filter(Photo.id.in_(ids)).delete(synchronize_session=False)
|
photo = FilePhoto.query.filter(FilePhoto.id.in_(ids)).delete(synchronize_session=False)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
if photo:
|
if photo:
|
||||||
return success_api(msg="删除成功")
|
return success_api(msg="删除成功")
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from applications.api import api_bp
|
|||||||
from applications.common.admin_log import login_log
|
from applications.common.admin_log import login_log
|
||||||
from applications.common.gen_captcha import add_auth_session
|
from applications.common.gen_captcha import add_auth_session
|
||||||
from applications.common.utils.http import fail_api, success_api
|
from applications.common.utils.http import fail_api, success_api
|
||||||
from applications.models import User
|
from applications.models import CompanyUser
|
||||||
|
|
||||||
from flask import render_template, make_response
|
from flask import render_template, make_response
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ class Login(Resource):
|
|||||||
|
|
||||||
if req.captcha != s_code:
|
if req.captcha != s_code:
|
||||||
return fail_api(msg="验证码错误")
|
return fail_api(msg="验证码错误")
|
||||||
user = User.query.filter_by(username=req.username).first()
|
user = CompanyUser.query.filter_by(username=req.username).first()
|
||||||
|
|
||||||
if user is None:
|
if user is None:
|
||||||
return fail_api(msg="不存在的用户")
|
return fail_api(msg="不存在的用户")
|
||||||
|
|||||||
+12
-12
@@ -10,7 +10,7 @@ from applications.common.serialization import power2_fields, power_fields
|
|||||||
from applications.common.utils.http import success_api, fail_api
|
from applications.common.utils.http import success_api, fail_api
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models import Power, Role
|
from applications.models import RightsPower, RightsRole
|
||||||
|
|
||||||
|
|
||||||
def get_render_config():
|
def get_render_config():
|
||||||
@@ -124,15 +124,15 @@ def make_menu_tree():
|
|||||||
|
|
||||||
# 删除权限(目前没有判断父节点自动删除子节点)
|
# 删除权限(目前没有判断父节点自动删除子节点)
|
||||||
def remove_power(power_id):
|
def remove_power(power_id):
|
||||||
power = Power.query.filter_by(id=power_id).first()
|
power = RightsPower.query.filter_by(id=power_id).first()
|
||||||
role_id_list = []
|
role_id_list = []
|
||||||
roles = power.role
|
roles = power.role
|
||||||
for role in roles:
|
for role in roles:
|
||||||
role_id_list.append(role.id)
|
role_id_list.append(role.id)
|
||||||
roles = Role.query.filter(Role.id.in_(role_id_list)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(role_id_list)).all()
|
||||||
for p in roles:
|
for p in roles:
|
||||||
power.role.remove(p)
|
power.role.remove(p)
|
||||||
r = Power.query.filter_by(id=power_id).delete()
|
r = RightsPower.query.filter_by(id=power_id).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return r
|
return r
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ class RightRights(Resource):
|
|||||||
def get(self):
|
def get(self):
|
||||||
"""获取选择父节点"""
|
"""获取选择父节点"""
|
||||||
|
|
||||||
power = Power.query.all()
|
power = RightsPower.query.all()
|
||||||
power_data = marshal(power, power_fields)
|
power_data = marshal(power, power_fields)
|
||||||
power_data.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
|
power_data.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
|
||||||
res = {
|
res = {
|
||||||
@@ -180,12 +180,12 @@ class RightRights(Resource):
|
|||||||
|
|
||||||
|
|
||||||
@rights_api.resource('/power/<int:power_id>')
|
@rights_api.resource('/power/<int:power_id>')
|
||||||
class RightsPower(Resource):
|
class RightsPowerView(Resource):
|
||||||
|
|
||||||
@authorize("admin:power:add", log=True)
|
@authorize("admin:power:add", log=True)
|
||||||
def post(self, power_id):
|
def post(self, power_id):
|
||||||
res = parser_power.parse_args()
|
res = parser_power.parse_args()
|
||||||
power = Power(
|
power = RightsPower(
|
||||||
icon=res.icon,
|
icon=res.icon,
|
||||||
open_type=res.open_type,
|
open_type=res.open_type,
|
||||||
parent_id=res.parent_id,
|
parent_id=res.parent_id,
|
||||||
@@ -208,15 +208,15 @@ class RightsPower(Resource):
|
|||||||
@authorize("admin:power:remove", log=True)
|
@authorize("admin:power:remove", log=True)
|
||||||
def delete(self, power_id):
|
def delete(self, power_id):
|
||||||
# 删除权限(目前没有判断父节点自动删除子节点)
|
# 删除权限(目前没有判断父节点自动删除子节点)
|
||||||
power = Power.query.filter_by(id=power_id).first()
|
power = RightsPower.query.filter_by(id=power_id).first()
|
||||||
role_id_list = []
|
role_id_list = []
|
||||||
roles = power.role
|
roles = power.role
|
||||||
for role in roles:
|
for role in roles:
|
||||||
role_id_list.append(role.id)
|
role_id_list.append(role.id)
|
||||||
roles = Role.query.filter(Role.id.in_(role_id_list)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(role_id_list)).all()
|
||||||
for p in roles:
|
for p in roles:
|
||||||
power.role.remove(p)
|
power.role.remove(p)
|
||||||
r = Power.query.filter_by(id=power_id).delete()
|
r = RightsPower.query.filter_by(id=power_id).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
if r:
|
if r:
|
||||||
@@ -238,7 +238,7 @@ class RightsPower(Resource):
|
|||||||
"url": res.power_url,
|
"url": res.power_url,
|
||||||
"sort": res.sort
|
"sort": res.sort
|
||||||
}
|
}
|
||||||
power = Power.query.filter_by(id=power_id).update(data)
|
power = RightsPower.query.filter_by(id=power_id).update(data)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
if not power:
|
if not power:
|
||||||
@@ -251,7 +251,7 @@ class PowerStatus(Resource):
|
|||||||
@authorize("admin:power:edit", log=True)
|
@authorize("admin:power:edit", log=True)
|
||||||
def put(self, right_id):
|
def put(self, right_id):
|
||||||
|
|
||||||
power = Power.query.get(right_id)
|
power = RightsPower.query.get(right_id)
|
||||||
if power:
|
if power:
|
||||||
power.enable = not power.enable
|
power.enable = not power.enable
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|||||||
+17
-17
@@ -7,28 +7,28 @@ from applications.common.utils.rights import authorize
|
|||||||
from applications.common.serialization import power_fields
|
from applications.common.serialization import power_fields
|
||||||
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models import Power, Role, User
|
from applications.models import RightsPower, RightsRole, CompanyUser
|
||||||
from . import api_bp
|
from . import api_bp
|
||||||
|
|
||||||
|
|
||||||
def remove_role(role_id):
|
def remove_role(role_id):
|
||||||
""" 删除角色 """
|
""" 删除角色 """
|
||||||
role = Role.query.filter_by(id=role_id).first()
|
role = RightsRole.query.filter_by(id=role_id).first()
|
||||||
# 删除该角色的权限
|
# 删除该角色的权限
|
||||||
power_id_list = []
|
power_id_list = []
|
||||||
for p in role.power:
|
for p in role.power:
|
||||||
power_id_list.append(p.id)
|
power_id_list.append(p.id)
|
||||||
|
|
||||||
powers = Power.query.filter(Power.id.in_(power_id_list)).all()
|
powers = RightsPower.query.filter(RightsPower.id.in_(power_id_list)).all()
|
||||||
for p in powers:
|
for p in powers:
|
||||||
role.power.remove(p)
|
role.power.remove(p)
|
||||||
user_id_list = []
|
user_id_list = []
|
||||||
for u in role.user:
|
for u in role.user:
|
||||||
user_id_list.append(u.id)
|
user_id_list.append(u.id)
|
||||||
users = User.query.filter(User.id.in_(user_id_list)).all()
|
users = CompanyUser.query.filter(CompanyUser.id.in_(user_id_list)).all()
|
||||||
for u in users:
|
for u in users:
|
||||||
role.user.remove(u)
|
role.user.remove(u)
|
||||||
r = Role.query.filter_by(id=role_id).delete()
|
r = RightsRole.query.filter_by(id=role_id).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return r
|
return r
|
||||||
|
|
||||||
@@ -57,11 +57,11 @@ class RoleRoles(Resource):
|
|||||||
|
|
||||||
filters = []
|
filters = []
|
||||||
if res.role_name:
|
if res.role_name:
|
||||||
filters.append(Role.name.like('%' + res.role_name + '%'))
|
filters.append(RightsRole.name.like('%' + res.role_name + '%'))
|
||||||
if res.role_code:
|
if res.role_code:
|
||||||
filters.append(Role.code.like('%' + res.role_code + '%'))
|
filters.append(RightsRole.code.like('%' + res.role_code + '%'))
|
||||||
|
|
||||||
paginate = Role.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False)
|
paginate = RightsRole.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False)
|
||||||
|
|
||||||
return table_api(data=[
|
return table_api(data=[
|
||||||
{
|
{
|
||||||
@@ -72,7 +72,7 @@ class RoleRoles(Resource):
|
|||||||
'remark': item.remark,
|
'remark': item.remark,
|
||||||
'details': item.details,
|
'details': item.details,
|
||||||
'sort': item.sort,
|
'sort': item.sort,
|
||||||
'create_at': item.create_time,
|
'create_at': item.create_at,
|
||||||
} for item in paginate.items
|
} for item in paginate.items
|
||||||
], count=paginate.total, code=0)
|
], count=paginate.total, code=0)
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ class RoleRole(Resource):
|
|||||||
|
|
||||||
res = parser.parse_args()
|
res = parser.parse_args()
|
||||||
|
|
||||||
role = Role(
|
role = RightsRole(
|
||||||
details=res.details,
|
details=res.details,
|
||||||
enable=res.enable,
|
enable=res.enable,
|
||||||
code=res.role_code,
|
code=res.role_code,
|
||||||
@@ -134,7 +134,7 @@ class RoleRole(Resource):
|
|||||||
"details": res.details
|
"details": res.details
|
||||||
}
|
}
|
||||||
|
|
||||||
role = Role.query.filter_by(id=role_id).update(data)
|
role = RightsRole.query.filter_by(id=role_id).update(data)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
if not role:
|
if not role:
|
||||||
return fail_api(msg="更新角色失败")
|
return fail_api(msg="更新角色失败")
|
||||||
@@ -147,7 +147,7 @@ class RoleEnable(Resource):
|
|||||||
|
|
||||||
@authorize("admin:role:edit", log=True)
|
@authorize("admin:role:edit", log=True)
|
||||||
def put(self, role_id):
|
def put(self, role_id):
|
||||||
ret = Role.query.get(role_id)
|
ret = RightsRole.query.get(role_id)
|
||||||
ret.enable = not ret.enable
|
ret.enable = not ret.enable
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
@@ -163,10 +163,10 @@ class RolePower(Resource):
|
|||||||
@authorize("admin:role:main", log=True)
|
@authorize("admin:role:main", log=True)
|
||||||
def get(self, role_id):
|
def get(self, role_id):
|
||||||
# 获取角色权限
|
# 获取角色权限
|
||||||
role = Role.query.filter_by(id=role_id).first()
|
role = RightsRole.query.filter_by(id=role_id).first()
|
||||||
# 获取权限列表的 id
|
# 获取权限列表的 id
|
||||||
check_powers_list = [rp.id for rp in role.power]
|
check_powers_list = [rp.id for rp in role.power]
|
||||||
powers = Power.query.all() # 获取所有的权限
|
powers = RightsPower.query.all() # 获取所有的权限
|
||||||
# power_schema = PowerSchema2(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类
|
# power_schema = PowerSchema2(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类
|
||||||
# 将所有的权限生产可序列化对象 json
|
# 将所有的权限生产可序列化对象 json
|
||||||
# powers = power_schema.dump(powers) # 生成可序列化对象
|
# powers = power_schema.dump(powers) # 生成可序列化对象
|
||||||
@@ -193,14 +193,14 @@ class RolePower(Resource):
|
|||||||
power_list = res.power_ids.split(',')
|
power_list = res.power_ids.split(',')
|
||||||
|
|
||||||
""" 更新角色权限 """
|
""" 更新角色权限 """
|
||||||
role = Role.query.filter_by(id=role_id).first()
|
role = RightsRole.query.filter_by(id=role_id).first()
|
||||||
power_id_list = []
|
power_id_list = []
|
||||||
for p in role.power:
|
for p in role.power:
|
||||||
power_id_list.append(p.id)
|
power_id_list.append(p.id)
|
||||||
powers = Power.query.filter(Power.id.in_(power_id_list)).all()
|
powers = RightsPower.query.filter(RightsPower.id.in_(power_id_list)).all()
|
||||||
for p in powers:
|
for p in powers:
|
||||||
role.power.remove(p)
|
role.power.remove(p)
|
||||||
powers = Power.query.filter(Power.id.in_(power_list)).all()
|
powers = RightsPower.query.filter(RightsPower.id.in_(power_list)).all()
|
||||||
for p in powers:
|
for p in powers:
|
||||||
role.power.append(p)
|
role.power.append(p)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from flask_restful import Resource, reqparse
|
|||||||
|
|
||||||
from applications.common.utils.http import fail_api, success_api
|
from applications.common.utils.http import fail_api, success_api
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models import User
|
from applications.models import CompanyUser
|
||||||
|
|
||||||
from . import users_api
|
from . import users_api
|
||||||
|
|
||||||
@@ -22,11 +22,11 @@ class UserStatus(Resource):
|
|||||||
res = parser.parse_args()
|
res = parser.parse_args()
|
||||||
|
|
||||||
if res.operate == 1:
|
if res.operate == 1:
|
||||||
user = User.query.get(user_id)
|
user = CompanyUser.query.get(user_id)
|
||||||
user.enable = res.operate
|
user.enable = res.operate
|
||||||
message = success_api(msg="启动成功")
|
message = success_api(msg="启动成功")
|
||||||
else:
|
else:
|
||||||
user = User.query.filter_by(id=res.user_id).update({"enable": res.operate})
|
user = CompanyUser.query.filter_by(id=res.user_id).update({"enable": res.operate})
|
||||||
message = success_api(msg="禁用成功")
|
message = success_api(msg="禁用成功")
|
||||||
if user:
|
if user:
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@@ -41,7 +41,7 @@ class UserAvatar(Resource):
|
|||||||
|
|
||||||
def put(self, user_id):
|
def put(self, user_id):
|
||||||
url = request.json.get("avatar").get("src")
|
url = request.json.get("avatar").get("src")
|
||||||
ret = User.query.get(user_id)
|
ret = CompanyUser.query.get(user_id)
|
||||||
ret.avatar = url
|
ret.avatar = url
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
if not ret:
|
if not ret:
|
||||||
@@ -62,7 +62,7 @@ class UserInfo(Resource):
|
|||||||
|
|
||||||
res = parser.parse_args()
|
res = parser.parse_args()
|
||||||
|
|
||||||
ret = User.query.get(user_id)
|
ret = CompanyUser.query.get(user_id)
|
||||||
ret.username = res.username
|
ret.username = res.username
|
||||||
ret.realname = res.real_name
|
ret.realname = res.real_name
|
||||||
ret.remark = res.details
|
ret.remark = res.details
|
||||||
@@ -89,7 +89,7 @@ class UserPassword(Resource):
|
|||||||
return fail_api(msg='确认密码不一致')
|
return fail_api(msg='确认密码不一致')
|
||||||
|
|
||||||
""" 修改当前用户密码 """
|
""" 修改当前用户密码 """
|
||||||
user = User.query.get(user_id)
|
user = CompanyUser.query.get(user_id)
|
||||||
is_right = user.validate_password(res.oldPassword)
|
is_right = user.validate_password(res.oldPassword)
|
||||||
if not is_right:
|
if not is_right:
|
||||||
return jsonify(success=False, msg="旧密码错误")
|
return jsonify(success=False, msg="旧密码错误")
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from sqlalchemy import desc
|
|||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.common.utils.http import fail_api, success_api, table_api
|
from applications.common.utils.http import fail_api, success_api, table_api
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.models import User, Role, Dept
|
from applications.models import CompanyUser, RightsRole, CompanyDepartment
|
||||||
from applications.models import AdminLog
|
from applications.models import AdminLog
|
||||||
from . import users_api
|
from . import users_api
|
||||||
|
|
||||||
@@ -15,26 +15,26 @@ from . import users_api
|
|||||||
def get_current_user_logs():
|
def get_current_user_logs():
|
||||||
""" 获取当前用户日志 """
|
""" 获取当前用户日志 """
|
||||||
log = AdminLog.query.filter_by(url='/passport/login').filter_by(uid=current_user.id).order_by(
|
log = AdminLog.query.filter_by(url='/passport/login').filter_by(uid=current_user.id).order_by(
|
||||||
desc(AdminLog.create_time)).limit(10)
|
desc(AdminLog.create_at)).limit(10)
|
||||||
return log
|
return log
|
||||||
|
|
||||||
|
|
||||||
def is_user_exists(username):
|
def is_user_exists(username):
|
||||||
""" 判断用户是否存在 """
|
""" 判断用户是否存在 """
|
||||||
res = User.query.filter_by(username=username).count()
|
res = CompanyUser.query.filter_by(username=username).count()
|
||||||
return bool(res)
|
return bool(res)
|
||||||
|
|
||||||
|
|
||||||
def delete_by_id(_id):
|
def delete_by_id(_id):
|
||||||
""" 删除用户 """
|
""" 删除用户 """
|
||||||
user = User.query.filter_by(id=_id).first()
|
user = CompanyUser.query.filter_by(id=_id).first()
|
||||||
roles_id = []
|
roles_id = []
|
||||||
for role in user.role:
|
for role in user.role:
|
||||||
roles_id.append(role.id)
|
roles_id.append(role.id)
|
||||||
roles = Role.query.filter(Role.id.in_(roles_id)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(roles_id)).all()
|
||||||
for r in roles:
|
for r in roles:
|
||||||
user.role.remove(r)
|
user.role.remove(r)
|
||||||
res = User.query.filter_by(id=_id).delete()
|
res = CompanyUser.query.filter_by(id=_id).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@@ -46,14 +46,14 @@ def batch_remove(ids):
|
|||||||
|
|
||||||
|
|
||||||
def update_user_role(_id, roles_list):
|
def update_user_role(_id, roles_list):
|
||||||
user = User.query.filter_by(id=_id).first()
|
user = CompanyUser.query.filter_by(id=_id).first()
|
||||||
roles_id = []
|
roles_id = []
|
||||||
for role in user.role:
|
for role in user.role:
|
||||||
roles_id.append(role.id)
|
roles_id.append(role.id)
|
||||||
roles = Role.query.filter(Role.id.in_(roles_id)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(roles_id)).all()
|
||||||
for r in roles:
|
for r in roles:
|
||||||
user.role.remove(r)
|
user.role.remove(r)
|
||||||
roles = Role.query.filter(Role.id.in_(roles_list)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(roles_list)).all()
|
||||||
for r in roles:
|
for r in roles:
|
||||||
user.role.append(r)
|
user.role.append(r)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@@ -77,17 +77,17 @@ class UserUsers(Resource):
|
|||||||
filters = []
|
filters = []
|
||||||
|
|
||||||
if res.real_name:
|
if res.real_name:
|
||||||
filters.append(User.realname.like('%' + res.real_name + '%'))
|
filters.append(CompanyUser.realname.like('%' + res.real_name + '%'))
|
||||||
if res.username:
|
if res.username:
|
||||||
filters.append(User.username.like('%' + res.username + '%'))
|
filters.append(CompanyUser.username.like('%' + res.username + '%'))
|
||||||
if res.dept_id:
|
if res.dept_id:
|
||||||
filters.append(User.dept_id == res.dept_id)
|
filters.append(CompanyUser.dept_id == res.dept_id)
|
||||||
|
|
||||||
paginate = User.query.filter(*filters).paginate(page=res.page,
|
paginate = CompanyUser.query.filter(*filters).paginate(page=res.page,
|
||||||
per_page=res.limit,
|
per_page=res.limit,
|
||||||
error_out=False)
|
error_out=False)
|
||||||
|
|
||||||
dept_name = lambda dept_id: Dept.query.filter_by(id=dept_id).first().dept_name if dept_id else ""
|
dept_name = lambda dept_id: CompanyDepartment.query.filter_by(id=dept_id).first().dept_name if dept_id else ""
|
||||||
user_data = [{
|
user_data = [{
|
||||||
'id': item.id,
|
'id': item.id,
|
||||||
'username': item.username,
|
'username': item.username,
|
||||||
@@ -116,7 +116,7 @@ class UserUsers(Resource):
|
|||||||
if is_user_exists(res.username):
|
if is_user_exists(res.username):
|
||||||
return fail_api(msg="用户已经存在")
|
return fail_api(msg="用户已经存在")
|
||||||
|
|
||||||
user = User()
|
user = CompanyUser()
|
||||||
user.username = res.username
|
user.username = res.username
|
||||||
user.realname = res.real_name
|
user.realname = res.real_name
|
||||||
user.set_password(res.password)
|
user.set_password(res.password)
|
||||||
@@ -124,8 +124,8 @@ class UserUsers(Resource):
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
""" 增加用户角色 """
|
""" 增加用户角色 """
|
||||||
user = User.query.filter_by(id=user.id).first()
|
user = CompanyUser.query.filter_by(id=user.id).first()
|
||||||
roles = Role.query.filter(Role.id.in_(role_ids)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(role_ids)).all()
|
||||||
for r in roles:
|
for r in roles:
|
||||||
user.role.append(r)
|
user.role.append(r)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@@ -160,7 +160,7 @@ class UserUser(Resource):
|
|||||||
if is_user_exists(res.username):
|
if is_user_exists(res.username):
|
||||||
return fail_api(msg="用户已经存在")
|
return fail_api(msg="用户已经存在")
|
||||||
|
|
||||||
user = User()
|
user = CompanyUser()
|
||||||
user.username = res.username
|
user.username = res.username
|
||||||
user.realname = res.real_name
|
user.realname = res.real_name
|
||||||
user.set_password(res.password)
|
user.set_password(res.password)
|
||||||
@@ -168,8 +168,8 @@ class UserUser(Resource):
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
""" 增加用户角色 """
|
""" 增加用户角色 """
|
||||||
user = User.query.filter_by(id=user.id).first()
|
user = CompanyUser.query.filter_by(id=user.id).first()
|
||||||
roles = Role.query.filter(Role.id.in_(role_ids)).all()
|
roles = RightsRole.query.filter(RightsRole.id.in_(role_ids)).all()
|
||||||
for r in roles:
|
for r in roles:
|
||||||
user.role.append(r)
|
user.role.append(r)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@@ -200,7 +200,7 @@ class UserRole(Resource):
|
|||||||
role_ids = res.role_ids.split(',')
|
role_ids = res.role_ids.split(',')
|
||||||
|
|
||||||
# 更新用户数据
|
# 更新用户数据
|
||||||
User.query.filter_by(id=user_id).update({'username': res.username,
|
CompanyUser.query.filter_by(id=user_id).update({'username': res.username,
|
||||||
'realname': res.real_name,
|
'realname': res.real_name,
|
||||||
'dept_id': res.dept_id})
|
'dept_id': res.dept_id})
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ power_fields = {
|
|||||||
'parentId': fields.String(attribute="parent_id"),
|
'parentId': fields.String(attribute="parent_id"),
|
||||||
'icon': fields.String,
|
'icon': fields.String,
|
||||||
'sort': fields.Integer,
|
'sort': fields.Integer,
|
||||||
'create_time': fields.DateTime,
|
'create_at': fields.DateTime,
|
||||||
'update_time': fields.DateTime,
|
'update_time': fields.DateTime,
|
||||||
'enable': fields.Integer,
|
'enable': fields.Integer,
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ power2_fields = {
|
|||||||
'parent_id': fields.Integer,
|
'parent_id': fields.Integer,
|
||||||
'icon': fields.String,
|
'icon': fields.String,
|
||||||
'sort': fields.Integer,
|
'sort': fields.Integer,
|
||||||
'create_time': fields.DateTime,
|
'create_at': fields.DateTime,
|
||||||
'update_time': fields.DateTime,
|
'update_time': fields.DateTime,
|
||||||
'enable': fields.Integer,
|
'enable': fields.Integer,
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@ log_fields = {
|
|||||||
'ip': fields.String,
|
'ip': fields.String,
|
||||||
'user_agent': fields.String,
|
'user_agent': fields.String,
|
||||||
'success': fields.Boolean,
|
'success': fields.Boolean,
|
||||||
'create_time': fields.DateTime,
|
'create_at': fields.DateTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
dept_fields = {
|
dept_fields = {
|
||||||
@@ -72,5 +72,5 @@ photo_fields = {
|
|||||||
'mime': fields.String,
|
'mime': fields.String,
|
||||||
'size': fields.String,
|
'size': fields.String,
|
||||||
'ext': fields.String,
|
'ext': fields.String,
|
||||||
'create_time': fields.DateTime,
|
'create_at': fields.DateTime,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from flask import current_app
|
|||||||
|
|
||||||
from applications.common.flask_uploads import UploadSet, IMAGES
|
from applications.common.flask_uploads import UploadSet, IMAGES
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models import Photo
|
from applications.models import FilePhoto
|
||||||
|
|
||||||
photos = UploadSet('photos', IMAGES)
|
photos = UploadSet('photos', IMAGES)
|
||||||
|
|
||||||
@@ -15,15 +15,15 @@ def upload_one(photo, mime):
|
|||||||
|
|
||||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||||
size = os.path.getsize(upload_url + '/' + filename)
|
size = os.path.getsize(upload_url + '/' + filename)
|
||||||
photo = Photo(name=filename, href=file_url, mime=mime, size=size)
|
photo = FilePhoto(name=filename, href=file_url, mime=mime, size=size)
|
||||||
db.session.add(photo)
|
db.session.add(photo)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return file_url
|
return file_url
|
||||||
|
|
||||||
|
|
||||||
def delete_photo_by_id(_id):
|
def delete_photo_by_id(_id):
|
||||||
photo_name = Photo.query.filter_by(id=_id).first().name
|
photo_name = FilePhoto.query.filter_by(id=_id).first().name
|
||||||
photo = Photo.query.filter_by(id=_id).delete()
|
photo = FilePhoto.query.filter_by(id=_id).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||||
os.remove(upload_url + '/' + photo_name)
|
os.remove(upload_url + '/' + photo_name)
|
||||||
|
|||||||
@@ -26,23 +26,23 @@ def register_script(app: Flask):
|
|||||||
"""数据库初始化"""
|
"""数据库初始化"""
|
||||||
|
|
||||||
# 创建化部门数据
|
# 创建化部门数据
|
||||||
from applications.models import Dept
|
from applications.models import CompanyDepartment
|
||||||
from applications.configs.init_data import cp_dept_data_list
|
from applications.configs.init_data import cp_dept_data_list
|
||||||
add_data(cp_dept_data_list, Dept)
|
add_data(cp_dept_data_list, CompanyDepartment)
|
||||||
|
|
||||||
# 图片数据
|
# 图片数据
|
||||||
from applications.models import Photo
|
from applications.models import FilePhoto
|
||||||
from applications.configs.init_data import file_photo_data_list
|
from applications.configs.init_data import file_photo_data_list
|
||||||
|
|
||||||
add_data(file_photo_data_list, Photo)
|
add_data(file_photo_data_list, FilePhoto)
|
||||||
|
|
||||||
# 初始化权限表数据
|
# 初始化权限表数据
|
||||||
from applications.models import Power
|
from applications.models import RightsPower
|
||||||
from applications.configs.init_data import rt_power_data_list
|
from applications.configs.init_data import rt_power_data_list
|
||||||
|
|
||||||
add_data(rt_power_data_list, Power)
|
add_data(rt_power_data_list, RightsPower)
|
||||||
# 初始化角色表
|
# 初始化角色表
|
||||||
from applications.models import Role
|
from applications.models import RightsRole
|
||||||
from applications.configs.init_data import rt_role_data_list
|
from applications.configs.init_data import rt_role_data_list
|
||||||
|
|
||||||
# 角色权限关系表
|
# 角色权限关系表
|
||||||
@@ -52,13 +52,13 @@ def register_script(app: Flask):
|
|||||||
db.session.execute('insert into rt_role_power VALUES (%s, %s, %s);' % tuple(data))
|
db.session.execute('insert into rt_role_power VALUES (%s, %s, %s);' % tuple(data))
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
add_data(rt_role_data_list, Role)
|
add_data(rt_role_data_list, RightsRole)
|
||||||
|
|
||||||
# 管理员用户
|
# 管理员用户
|
||||||
from applications.models import User
|
from applications.models import CompanyUser
|
||||||
from applications.configs.init_data import cp_user_data_list
|
from applications.configs.init_data import cp_user_data_list
|
||||||
|
|
||||||
add_data(cp_user_data_list, User)
|
add_data(cp_user_data_list, CompanyUser)
|
||||||
|
|
||||||
# 用户角色表
|
# 用户角色表
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
|||||||
@@ -10,6 +10,6 @@ def init_login_manager(app):
|
|||||||
|
|
||||||
@login_manager.user_loader
|
@login_manager.user_loader
|
||||||
def load_user(user_id):
|
def load_user(user_id):
|
||||||
from applications.models import User
|
from applications.models import CompanyUser
|
||||||
user = User.query.get(int(user_id))
|
user = CompanyUser.query.get(int(user_id))
|
||||||
return user
|
return user
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
from applications.models.users import Dept, User
|
from applications.models.file import FilePhoto
|
||||||
from applications.models.log import AdminLog
|
from applications.models.log import AdminLog
|
||||||
from applications.models.file.photo import Photo
|
from applications.models.rights import RightsPower, RightsRole, role_power, user_role
|
||||||
from applications.models.rights.power import Power
|
from applications.models.users import CompanyDepartment, CompanyUser
|
||||||
from applications.models.rights.role import Role
|
|
||||||
from applications.models.rights.role_power import role_power
|
|
||||||
from applications.models.rights.user_role import user_role
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from applications.extensions import db
|
||||||
|
|
||||||
|
|
||||||
|
class BaseModel(object):
|
||||||
|
create_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')
|
||||||
|
update_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from .photo import FilePhoto
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
import datetime
|
|
||||||
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
|
||||||
|
from ..base import BaseModel
|
||||||
|
|
||||||
class Photo(db.Model):
|
|
||||||
|
class FilePhoto(db.Model, BaseModel):
|
||||||
__tablename__ = 'file_photo'
|
__tablename__ = 'file_photo'
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
name = db.Column(db.String(255), nullable=False)
|
name = db.Column(db.String(255), nullable=False)
|
||||||
href = db.Column(db.String(255))
|
href = db.Column(db.String(255))
|
||||||
mime = db.Column(db.CHAR(50), nullable=False)
|
mime = db.Column(db.CHAR(50), nullable=False)
|
||||||
size = db.Column(db.CHAR(30), nullable=False)
|
size = db.Column(db.CHAR(30), nullable=False)
|
||||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now)
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from datetime import datetime
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
from .base import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class AdminLog(db.Model):
|
class AdminLog(db.Model, BaseModel):
|
||||||
__tablename__ = 'admin_admin_log'
|
__tablename__ = 'admin_admin_log'
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
method = db.Column(db.String(10))
|
method = db.Column(db.String(10))
|
||||||
@@ -12,4 +12,4 @@ class AdminLog(db.Model):
|
|||||||
ip = db.Column(db.String(255))
|
ip = db.Column(db.String(255))
|
||||||
success = db.Column(db.Integer)
|
success = db.Column(db.Integer)
|
||||||
user_agent = db.Column(db.Text)
|
user_agent = db.Column(db.Text)
|
||||||
create_time = db.Column(db.DateTime, default=datetime.now)
|
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
from applications.extensions import db
|
||||||
|
from .power import RightsPower
|
||||||
|
from .role import RightsRole
|
||||||
|
|
||||||
|
# 创建中间表
|
||||||
|
user_role = db.Table(
|
||||||
|
"rt_user_role", # 中间表名称
|
||||||
|
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
||||||
|
db.Column("user_id", db.Integer, db.ForeignKey("cp_user.id"), comment='用户编号'), # 属性 外键
|
||||||
|
db.Column("role_id", db.Integer, db.ForeignKey("rt_role.id"), comment='角色编号'), # 属性 外键
|
||||||
|
)
|
||||||
|
|
||||||
|
# 创建中间表
|
||||||
|
role_power = db.Table(
|
||||||
|
"rt_role_power", # 中间表名称
|
||||||
|
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
||||||
|
db.Column("power_id", db.Integer, db.ForeignKey("rt_power.id"), comment='用户编号'), # 属性 外键
|
||||||
|
db.Column("role_id", db.Integer, db.ForeignKey("rt_role.id"), comment='角色编号'), # 属性 外键
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
from ..base import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class Power(db.Model):
|
class RightsPower(db.Model, BaseModel):
|
||||||
__tablename__ = 'rt_power'
|
__tablename__ = 'rt_power'
|
||||||
id = db.Column(db.Integer, primary_key=True, comment='权限编号')
|
id = db.Column(db.Integer, primary_key=True, comment='权限编号')
|
||||||
name = db.Column(db.String(255), comment='权限名称')
|
name = db.Column(db.String(255), comment='权限名称')
|
||||||
@@ -14,7 +16,8 @@ class Power(db.Model):
|
|||||||
icon = db.Column(db.String(128), comment='图标')
|
icon = db.Column(db.String(128), comment='图标')
|
||||||
sort = db.Column(db.Integer, comment='排序')
|
sort = db.Column(db.Integer, comment='排序')
|
||||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||||
|
|
||||||
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
||||||
enable = db.Column(db.Integer, comment='是否开启')
|
enable = db.Column(db.Integer, comment='是否开启')
|
||||||
|
|
||||||
parent = db.relationship("Power", remote_side=[id]) # 自关联
|
parent = db.relationship("RightsPower", remote_side=[id]) # 自关联
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import datetime
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
from ..base import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class Role(db.Model):
|
class RightsRole(db.Model, BaseModel):
|
||||||
__tablename__ = 'rt_role'
|
__tablename__ = 'rt_role'
|
||||||
id = db.Column(db.Integer, primary_key=True, comment='角色ID')
|
id = db.Column(db.Integer, primary_key=True, comment='角色ID')
|
||||||
name = db.Column(db.String(255), comment='角色名称')
|
name = db.Column(db.String(255), comment='角色名称')
|
||||||
@@ -11,6 +11,5 @@ class Role(db.Model):
|
|||||||
remark = db.Column(db.String(255), comment='备注')
|
remark = db.Column(db.String(255), comment='备注')
|
||||||
details = db.Column(db.String(255), comment='详情')
|
details = db.Column(db.String(255), comment='详情')
|
||||||
sort = db.Column(db.Integer, comment='排序')
|
sort = db.Column(db.Integer, comment='排序')
|
||||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
|
||||||
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
power = db.relationship('RightsPower', secondary="rt_role_power", backref=db.backref('role'))
|
||||||
power = db.relationship('Power', secondary="rt_role_power", backref=db.backref('role'))
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
from applications.extensions import db
|
|
||||||
|
|
||||||
# 创建中间表
|
|
||||||
role_power = db.Table(
|
|
||||||
"rt_role_power", # 中间表名称
|
|
||||||
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
|
||||||
db.Column("power_id", db.Integer, db.ForeignKey("rt_power.id"), comment='用户编号'), # 属性 外键
|
|
||||||
db.Column("role_id", db.Integer, db.ForeignKey("rt_role.id"), comment='角色编号'), # 属性 外键
|
|
||||||
)
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
from applications.extensions import db
|
|
||||||
|
|
||||||
# 创建中间表
|
|
||||||
user_role = db.Table(
|
|
||||||
"rt_user_role", # 中间表名称
|
|
||||||
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
|
||||||
db.Column("user_id", db.Integer, db.ForeignKey("cp_user.id"), comment='用户编号'), # 属性 外键
|
|
||||||
db.Column("role_id", db.Integer, db.ForeignKey("rt_role.id"), comment='角色编号'), # 属性 外键
|
|
||||||
)
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
from .dept import Dept
|
from .dept import CompanyDepartment
|
||||||
from .users import User
|
from .users import CompanyUser
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import datetime
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
from ..base import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class Dept(db.Model):
|
class CompanyDepartment(db.Model, BaseModel):
|
||||||
__tablename__ = 'cp_dept'
|
__tablename__ = 'cp_dept'
|
||||||
id = db.Column(db.Integer, primary_key=True, comment="部门ID")
|
id = db.Column(db.Integer, primary_key=True, comment="部门ID")
|
||||||
parent_id = db.Column(db.Integer, comment="父级编号")
|
parent_id = db.Column(db.Integer, comment="父级编号")
|
||||||
@@ -14,5 +14,3 @@ class Dept(db.Model):
|
|||||||
status = db.Column(db.Integer, comment='状态(1开启,0关闭)')
|
status = db.Column(db.Integer, comment='状态(1开启,0关闭)')
|
||||||
remark = db.Column(db.Text, comment="备注")
|
remark = db.Column(db.Text, comment="备注")
|
||||||
address = db.Column(db.String(255), comment="详细地址")
|
address = db.Column(db.String(255), comment="详细地址")
|
||||||
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
|
||||||
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import datetime
|
|
||||||
from flask_login import UserMixin
|
from flask_login import UserMixin
|
||||||
from werkzeug.security import generate_password_hash, check_password_hash
|
from werkzeug.security import generate_password_hash, check_password_hash
|
||||||
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
|
from ..base import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class User(db.Model, UserMixin):
|
class CompanyUser(db.Model, UserMixin, BaseModel):
|
||||||
__tablename__ = 'cp_user'
|
__tablename__ = 'cp_user'
|
||||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID')
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID')
|
||||||
username = db.Column(db.String(20), comment='用户名')
|
username = db.Column(db.String(20), comment='用户名')
|
||||||
@@ -15,14 +16,11 @@ class User(db.Model, UserMixin):
|
|||||||
password_hash = db.Column(db.String(128), comment='哈希密码')
|
password_hash = db.Column(db.String(128), comment='哈希密码')
|
||||||
enable = db.Column(db.Integer, default=0, comment='启用')
|
enable = db.Column(db.Integer, default=0, comment='启用')
|
||||||
dept_id = db.Column(db.Integer, comment='部门id')
|
dept_id = db.Column(db.Integer, comment='部门id')
|
||||||
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
|
||||||
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
|
|
||||||
|
|
||||||
role = db.relationship('Role', secondary="rt_user_role", backref=db.backref('user'), lazy='dynamic')
|
role = db.relationship('RightsRole', secondary="rt_user_role", backref=db.backref('user'), lazy='dynamic')
|
||||||
|
|
||||||
def set_password(self, password):
|
def set_password(self, password):
|
||||||
self.password_hash = generate_password_hash(password)
|
self.password_hash = generate_password_hash(password)
|
||||||
|
|
||||||
def validate_password(self, password):
|
def validate_password(self, password):
|
||||||
return check_password_hash(self.password_hash, password)
|
return check_password_hash(self.password_hash, password)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from flask import render_template, request
|
from flask import render_template, request
|
||||||
|
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.models import Dept
|
from applications.models import CompanyDepartment
|
||||||
from applications.view import index_bp
|
from applications.view import index_bp
|
||||||
|
|
||||||
|
|
||||||
@@ -21,5 +21,5 @@ def add():
|
|||||||
@authorize("admin:dept:edit", log=True)
|
@authorize("admin:dept:edit", log=True)
|
||||||
def edit():
|
def edit():
|
||||||
dept_id = request.args.get("deptId", type=int)
|
dept_id = request.args.get("deptId", type=int)
|
||||||
dept = Dept.query.get(dept_id)
|
dept = CompanyDepartment.query.get(dept_id)
|
||||||
return render_template('department/edit.html', dept=dept)
|
return render_template('department/edit.html', dept=dept)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ def login_log():
|
|||||||
limit = request.args.get('limit', type=int)
|
limit = request.args.get('limit', type=int)
|
||||||
log_paginate = AdminLog.query.filter_by(
|
log_paginate = AdminLog.query.filter_by(
|
||||||
url='/passport/login').order_by(
|
url='/passport/login').order_by(
|
||||||
desc(AdminLog.create_time)).paginate(
|
desc(AdminLog.create_at)).paginate(
|
||||||
page=page, per_page=limit, error_out=False)
|
page=page, per_page=limit, error_out=False)
|
||||||
data = marshal(log_paginate.items, log_fields)
|
data = marshal(log_paginate.items, log_fields)
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ def operate_log():
|
|||||||
limit = request.args.get('limit', type=int)
|
limit = request.args.get('limit', type=int)
|
||||||
log_paginate = AdminLog.query.filter(
|
log_paginate = AdminLog.query.filter(
|
||||||
AdminLog.url != '/passport/login').order_by(
|
AdminLog.url != '/passport/login').order_by(
|
||||||
desc(AdminLog.create_time)).paginate(
|
desc(AdminLog.create_at)).paginate(
|
||||||
page=page, per_page=limit, error_out=False)
|
page=page, per_page=limit, error_out=False)
|
||||||
data = marshal(log_paginate.items, log_fields)
|
data = marshal(log_paginate.items, log_fields)
|
||||||
return table_api(data=data, count=log_paginate.total)
|
return table_api(data=data, count=log_paginate.total)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from flask import render_template
|
from flask import render_template
|
||||||
|
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.models import Power
|
from applications.models import RightsPower
|
||||||
from applications.view import index_bp
|
from applications.view import index_bp
|
||||||
|
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ def rights_index():
|
|||||||
@index_bp.get('/rights/power/<int:power_id>')
|
@index_bp.get('/rights/power/<int:power_id>')
|
||||||
@authorize("admin:power:edit", log=True)
|
@authorize("admin:power:edit", log=True)
|
||||||
def get(power_id):
|
def get(power_id):
|
||||||
power = Power.query.filter_by(id=power_id).first()
|
power = RightsPower.query.filter_by(id=power_id).first()
|
||||||
icon = str(power.icon).split()
|
icon = str(power.icon).split()
|
||||||
if len(icon) == 2:
|
if len(icon) == 2:
|
||||||
icon = icon[1]
|
icon = icon[1]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from flask import Blueprint, render_template
|
|||||||
|
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
|
|
||||||
from applications.models import Role
|
from applications.models import RightsRole
|
||||||
|
|
||||||
role_bp = Blueprint('role', __name__, url_prefix='/admin/role')
|
role_bp = Blueprint('role', __name__, url_prefix='/admin/role')
|
||||||
|
|
||||||
@@ -25,5 +25,5 @@ def power(_id):
|
|||||||
@authorize("admin:role:edit", log=True)
|
@authorize("admin:role:edit", log=True)
|
||||||
@role_bp.get('/edit/<int:role_id>')
|
@role_bp.get('/edit/<int:role_id>')
|
||||||
def role_editor(role_id):
|
def role_editor(role_id):
|
||||||
role = Role.query.filter_by(id=role_id).first()
|
role = RightsRole.query.filter_by(id=role_id).first()
|
||||||
return render_template('roles/edit.html', role=role)
|
return render_template('roles/edit.html', role=role)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from flask_login import login_required, current_user
|
|||||||
from sqlalchemy import desc
|
from sqlalchemy import desc
|
||||||
|
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.models import AdminLog, Role, User
|
from applications.models import AdminLog, RightsRole, CompanyUser
|
||||||
|
|
||||||
from . import index_bp
|
from . import index_bp
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ def users_main():
|
|||||||
@login_required
|
@login_required
|
||||||
def users_center():
|
def users_center():
|
||||||
user_logs = AdminLog.query.filter_by(url='/passport/login').filter_by(uid=current_user.id).order_by(
|
user_logs = AdminLog.query.filter_by(url='/passport/login').filter_by(uid=current_user.id).order_by(
|
||||||
desc(AdminLog.create_time)).limit(10)
|
desc(AdminLog.create_at)).limit(10)
|
||||||
return render_template('users/profile.html', user_info=current_user, user_logs=user_logs)
|
return render_template('users/profile.html', user_info=current_user, user_logs=user_logs)
|
||||||
|
|
||||||
|
|
||||||
@@ -27,8 +27,8 @@ def users_center():
|
|||||||
@authorize("admin:user:edit", log=True)
|
@authorize("admin:user:edit", log=True)
|
||||||
def users_user_id_view(user_id):
|
def users_user_id_view(user_id):
|
||||||
# 获取编辑用户信息
|
# 获取编辑用户信息
|
||||||
user = User.query.filter_by(id=user_id).first()
|
user = CompanyUser.query.filter_by(id=user_id).first()
|
||||||
roles = Role.query.all()
|
roles = RightsRole.query.all()
|
||||||
checked_roles = []
|
checked_roles = []
|
||||||
for r in user.role:
|
for r in user.role:
|
||||||
checked_roles.append(r.id)
|
checked_roles.append(r.id)
|
||||||
|
|||||||
+28
-25
@@ -7,7 +7,7 @@
|
|||||||
<body class="pear-container">
|
<body class="pear-container">
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
<table id="photo_table" lay-filter="photo_table"></table>
|
<table id="tables" lay-filter="tables"></table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
@@ -34,6 +34,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script type="text/html" id="toolbar">
|
||||||
|
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="add">
|
||||||
|
<i class="layui-icon layui-icon-add-1"></i>
|
||||||
|
新增
|
||||||
|
</button>
|
||||||
|
<button class="pear-btn pear-btn-sm" lay-event="batchRemove">
|
||||||
|
<i class="layui-icon layui-icon-delete"></i>
|
||||||
|
删除
|
||||||
|
</button>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/html" id="tools">
|
||||||
|
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i
|
||||||
|
class="layui-icon layui-icon-delete"></i></button>
|
||||||
|
</script>
|
||||||
|
|
||||||
{% include 'common/footer.html' %}
|
{% include 'common/footer.html' %}
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import { FILE_API } from '/static/api/http.js'
|
import { FILE_API } from '/static/api/http.js'
|
||||||
@@ -86,19 +102,15 @@
|
|||||||
align: 'center'
|
align: 'center'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'create_time',
|
field: 'create_at',
|
||||||
title: '创建时间',
|
title: '创建时间',
|
||||||
templet: (d) => `${layui.util.toDateString(d.create_time, 'yyyy-MM-dd HH:mm:ss')}`,
|
templet: (d) => `${layui.util.toDateString(d.create_at, 'yyyy-MM-dd HH:mm:ss')}`,
|
||||||
unresize: true,
|
unresize: true,
|
||||||
align: 'center'
|
align: 'center'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
toolbar: (d) => {
|
toolbar: '#tools',
|
||||||
return `<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove">
|
|
||||||
<i class="layui-icon layui-icon-delete"></i>
|
|
||||||
</button>`
|
|
||||||
},
|
|
||||||
align: 'center',
|
align: 'center',
|
||||||
unresize: true,
|
unresize: true,
|
||||||
width: 200
|
width: 200
|
||||||
@@ -107,28 +119,19 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
table.render({
|
table.render({
|
||||||
elem: '#photo_table',
|
elem: '#tables',
|
||||||
url: FILE_API.PHOTOS(),
|
url: FILE_API.PHOTOS(),
|
||||||
page: true,
|
page: true,
|
||||||
cols: cols,
|
cols: cols,
|
||||||
skin: 'line',
|
skin: 'line',
|
||||||
toolbar: (d) => {
|
toolbar: '#toolbar',
|
||||||
return `<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="add">
|
|
||||||
<i class="layui-icon layui-icon-add-1"></i>
|
|
||||||
新增
|
|
||||||
</button>
|
|
||||||
<button class="pear-btn pear-btn-sm" lay-event="batchRemove">
|
|
||||||
<i class="layui-icon layui-icon-delete"></i>
|
|
||||||
删除
|
|
||||||
</button>`
|
|
||||||
},
|
|
||||||
defaultToolbar: [{
|
defaultToolbar: [{
|
||||||
layEvent: 'refresh',
|
layEvent: 'refresh',
|
||||||
icon: 'layui-icon-refresh',
|
icon: 'layui-icon-refresh',
|
||||||
}, 'filter', 'print', 'exports']
|
}, 'filter', 'print', 'exports']
|
||||||
})
|
})
|
||||||
|
|
||||||
table.on('tool(photo_table)', function (obj) {
|
table.on('tool(tables)', function (obj) {
|
||||||
if (obj.event === 'remove') {
|
if (obj.event === 'remove') {
|
||||||
window.remove(obj)
|
window.remove(obj)
|
||||||
} else if (obj.event === 'photo') {
|
} else if (obj.event === 'photo') {
|
||||||
@@ -136,7 +139,7 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
table.on('toolbar(photo_table)', function (obj) {
|
table.on('toolbar(tables)', function (obj) {
|
||||||
if (obj.event === 'add') {
|
if (obj.event === 'add') {
|
||||||
window.add()
|
window.add()
|
||||||
} else if (obj.event === 'refresh') {
|
} else if (obj.event === 'refresh') {
|
||||||
@@ -147,7 +150,7 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
//弹出窗设置 自己设置弹出百分比
|
//弹出窗设置 自己设置弹出百分比
|
||||||
function screen () {
|
function screen (width, height) {
|
||||||
if (typeof width !== 'number' || width === 0) {
|
if (typeof width !== 'number' || width === 0) {
|
||||||
width = $(window).width() * 0.8
|
width = $(window).width() * 0.8
|
||||||
}
|
}
|
||||||
@@ -210,7 +213,7 @@
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
var ids = []
|
var ids = []
|
||||||
var hasCheck = table.checkStatus('photo_table')
|
var hasCheck = table.checkStatus('tables')
|
||||||
var hasCheckData = hasCheck.data
|
var hasCheckData = hasCheck.data
|
||||||
if (hasCheckData.length > 0) {
|
if (hasCheckData.length > 0) {
|
||||||
$.each(hasCheckData, function (index, element) {
|
$.each(hasCheckData, function (index, element) {
|
||||||
@@ -235,7 +238,7 @@
|
|||||||
icon: 1,
|
icon: 1,
|
||||||
time: 1000
|
time: 1000
|
||||||
}, function () {
|
}, function () {
|
||||||
table.reload('photo_table')
|
table.reload('tables')
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
layer.msg(res.msg, {
|
layer.msg(res.msg, {
|
||||||
@@ -249,7 +252,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
window.refresh = function () {
|
window.refresh = function () {
|
||||||
table.reload('photo_table')
|
table.reload('tables')
|
||||||
}
|
}
|
||||||
// 查看大图
|
// 查看大图
|
||||||
window.photo = function (obj) {
|
window.photo = function (obj) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<script type="text/html" id="log-createTime">
|
<script type="text/html" id="log-createTime">
|
||||||
{{ ' {{layui.util.toDateString(d.create_time, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
|
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
|
||||||
</script>
|
</script>
|
||||||
<script type="text/html" id="log-status">
|
<script type="text/html" id="log-status">
|
||||||
{{ '{{#if (d.success == true) { }}
|
{{ '{{#if (d.success == true) { }}
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
{ title: '接口', field: 'url', align: 'center' },
|
{ title: '接口', field: 'url', align: 'center' },
|
||||||
{ title: '浏览器', field: 'user_agent', align: 'center' },
|
{ title: '浏览器', field: 'user_agent', align: 'center' },
|
||||||
{ title: '操作地址', field: 'ip', align: 'center' },
|
{ title: '操作地址', field: 'ip', align: 'center' },
|
||||||
{ title: '访问时间', field: 'create_time', templet: '#log-createTime', align: 'center' },
|
{ title: '访问时间', field: 'create_at', templet: '#log-createTime', align: 'center' },
|
||||||
{ title: '操作人ID', field: 'uid', align: 'center' },
|
{ title: '操作人ID', field: 'uid', align: 'center' },
|
||||||
{ title: '描述', field: 'desc', align: 'center' },
|
{ title: '描述', field: 'desc', align: 'center' },
|
||||||
{ title: '访问状态', templet: '#log-status', align: 'center' }
|
{ title: '访问状态', templet: '#log-status', align: 'center' }
|
||||||
|
|||||||
Reference in New Issue
Block a user