fix:提交冲突
This commit is contained in:
@@ -94,7 +94,7 @@ venv\Scripts\activate
|
||||
# source venv/bin/activate # (Linux激活虚拟环境)
|
||||
|
||||
# 安装依赖
|
||||
pip install -r requirement\requirement-dev.txt
|
||||
pip install -r requirement.txt
|
||||
```
|
||||
|
||||
+ 数据迁移
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import copy
|
||||
from typing import Optional
|
||||
from collections import OrderedDict
|
||||
from typing import Optional
|
||||
|
||||
from flask import request, jsonify, current_app
|
||||
from flask.views import MethodView
|
||||
from flask_login import current_user
|
||||
from flask_pydantic import validate
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from common.utils.http import success_api, fail_api
|
||||
@@ -148,27 +147,6 @@ def make_menu_tree():
|
||||
return sorted(menu_dict.get(0), key=lambda item: item['sort'])
|
||||
|
||||
|
||||
# 删除权限(目前没有判断父节点自动删除子节点)
|
||||
def remove_power(power_id):
|
||||
power = RightModel.query.filter_by(id=power_id).first()
|
||||
role_id_list = []
|
||||
roles = power.role
|
||||
for role in roles:
|
||||
role_id_list.append(role.id)
|
||||
roles = RoleModel.query.filter(RoleModel.id.in_(role_id_list)).all()
|
||||
for p in roles:
|
||||
power.role.remove(p)
|
||||
r = RightModel.query.filter_by(id=power_id).delete()
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
# 批量删除权限
|
||||
def batch_remove_power(ids):
|
||||
for _id in ids:
|
||||
remove_power(_id)
|
||||
|
||||
|
||||
class PowerModel(BaseModel):
|
||||
icon: str
|
||||
open_type: Optional[str] = Field(alias='openType')
|
||||
@@ -208,7 +186,14 @@ class RightsApi(MethodView):
|
||||
|
||||
def delete(self):
|
||||
ids = request.form.getlist('ids[]')
|
||||
batch_remove_power(ids)
|
||||
for id in ids:
|
||||
role = RoleModel.query.filter_by(id=id).first()
|
||||
# 删除该角色的权限和用户
|
||||
role.power = []
|
||||
role.user = []
|
||||
|
||||
r = RoleModel.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return success_api(message="批量删除成功")
|
||||
|
||||
|
||||
|
||||
@@ -1,48 +1,21 @@
|
||||
from flask import request
|
||||
from flask.views import MethodView
|
||||
|
||||
from flask_restful import reqparse
|
||||
|
||||
from common.utils.http import table_api, success_api, fail_api
|
||||
from extensions import db
|
||||
from models import RightModel, RoleModel, UserModel
|
||||
|
||||
|
||||
def remove_role(role_id):
|
||||
""" 删除角色 """
|
||||
role = RoleModel.query.filter_by(id=role_id).first()
|
||||
# 删除该角色的权限
|
||||
power_id_list = []
|
||||
for p in role.power:
|
||||
power_id_list.append(p.id)
|
||||
|
||||
powers = RightModel.query.filter(RightModel.id.in_(power_id_list)).all()
|
||||
for p in powers:
|
||||
role.power.remove(p)
|
||||
user_id_list = []
|
||||
for u in role.user:
|
||||
user_id_list.append(u.id)
|
||||
users = UserModel.query.filter(UserModel.id.in_(user_id_list)).all()
|
||||
for u in users:
|
||||
role.user.remove(u)
|
||||
r = RoleModel.query.filter_by(id=role_id).delete()
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
def batch_remove_role(role_ids):
|
||||
""" 批量删除 """
|
||||
for role_id in role_ids:
|
||||
remove_role(role_id)
|
||||
from models import RightModel, RoleModel
|
||||
|
||||
|
||||
def role_deletes():
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('ids[]', action='append', dest='ids')
|
||||
ids = request.form.getlist('ids[]')
|
||||
for id in ids:
|
||||
role = RoleModel.query.filter_by(id=id).first()
|
||||
# 删除该角色的权限和用户
|
||||
role.power = []
|
||||
role.user = []
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
batch_remove_role(res.ids)
|
||||
r = RoleModel.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return success_api(message="批量删除成功")
|
||||
|
||||
|
||||
@@ -169,21 +142,21 @@ class RolePowerApi(MethodView):
|
||||
|
||||
""" 更新角色权限 """
|
||||
role = RoleModel.query.filter_by(id=_id).first()
|
||||
power_id_list = []
|
||||
for p in role.power:
|
||||
power_id_list.append(p.id)
|
||||
powers = RightModel.query.filter(RightModel.id.in_(power_id_list)).all()
|
||||
for p in powers:
|
||||
role.power.remove(p)
|
||||
powers = RightModel.query.filter(RightModel.id.in_(power_list)).all()
|
||||
for p in powers:
|
||||
role.power.append(p)
|
||||
role.power = powers
|
||||
|
||||
db.session.commit()
|
||||
return success_api(message="授权成功")
|
||||
|
||||
# 角色删除
|
||||
def delete(self, _id):
|
||||
res = remove_role(_id)
|
||||
if not res:
|
||||
role = RoleModel.query.filter_by(id=_id).first()
|
||||
# 删除该角色的权限和用户
|
||||
role.power = []
|
||||
role.user = []
|
||||
|
||||
r = RoleModel.query.filter_by(id=_id).delete()
|
||||
db.session.commit()
|
||||
if not r:
|
||||
return fail_api(message="角色删除失败")
|
||||
return success_api(message="角色删除成功")
|
||||
|
||||
+22
-28
@@ -4,7 +4,6 @@ from flask import request, jsonify
|
||||
from flask.views import MethodView
|
||||
from flask_login import current_user
|
||||
from flask_pydantic import validate
|
||||
from flask_restful import reqparse
|
||||
from pydantic import BaseModel, Field
|
||||
from sqlalchemy import desc
|
||||
|
||||
@@ -181,35 +180,31 @@ def user_role_resource(_id, body: PersonModel2):
|
||||
|
||||
def user_info(_id, action):
|
||||
if action == 'info':
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('realName', type=str, dest='real_name')
|
||||
parser.add_argument('username', type=str)
|
||||
parser.add_argument('remark', type=str)
|
||||
parser.add_argument('details', type=str)
|
||||
|
||||
res = parser.parse_args()
|
||||
real_name = request.json.get('realName', '')
|
||||
username = request.json.get('username', '')
|
||||
remark = request.json.get('remark', '')
|
||||
details = request.json.get('details', '')
|
||||
|
||||
ret = UserModel.query.get(_id)
|
||||
ret.username = res.username
|
||||
ret.realname = res.real_name
|
||||
ret.remark = res.details
|
||||
ret.username = username
|
||||
ret.realname = real_name
|
||||
ret.remark = details
|
||||
db.session.commit()
|
||||
if not ret:
|
||||
return fail_api(message="出错啦")
|
||||
return success_api(message="更新成功")
|
||||
elif action == 'status':
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('userId', type=int, required=True, dest='user_id')
|
||||
parser.add_argument('operate', type=int, required=True, dest='operate', choices=[0, 1])
|
||||
user_id = int(request.json.get('userId', 0)) # int
|
||||
operate = int(request.json.get('operate', 0)) # int
|
||||
if operate not in [0, 1]:
|
||||
return {'status': 'error', 'message': '请求有误'}
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
if res.operate == 1:
|
||||
if operate == 1:
|
||||
user = UserModel.query.get(_id)
|
||||
user.enable = res.operate
|
||||
user.enable = operate
|
||||
message = success_api(message="启动成功")
|
||||
else:
|
||||
user = UserModel.query.filter_by(id=res.user_id).update({"enable": res.operate})
|
||||
user = UserModel.query.filter_by(id=user_id).update({"enable": operate})
|
||||
message = success_api(message="禁用成功")
|
||||
if user:
|
||||
db.session.commit()
|
||||
@@ -225,22 +220,21 @@ def user_info(_id, action):
|
||||
return fail_api(message="出错啦")
|
||||
return success_api(message="修改成功")
|
||||
elif action == 'password':
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('oldPassword', type=str, required=True, help='旧密码不得为空')
|
||||
parser.add_argument('newPassword', type=str, required=True, help='新密码不得为空')
|
||||
parser.add_argument('confirmPassword', type=str, required=True, help='确认密码不能为空')
|
||||
oldPassword = request.json.get('oldPassword', '')
|
||||
newPassword = request.json.get('newPassword', '')
|
||||
confirmPassword = request.json.get('confirmPassword', '')
|
||||
if not all([oldPassword, newPassword, confirmPassword]):
|
||||
return {'status': 'error', 'message': '密码不能为空'}
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
if res.newPassword != res.confirmPassword:
|
||||
if newPassword != confirmPassword:
|
||||
return fail_api(message='确认密码不一致')
|
||||
|
||||
""" 修改当前用户密码 """
|
||||
user = UserModel.query.get(_id)
|
||||
is_right = user.validate_password(res.oldPassword)
|
||||
is_right = user.validate_password(oldPassword)
|
||||
if not is_right:
|
||||
return jsonify(success=False, message="旧密码错误")
|
||||
user.set_password(res.newPassword)
|
||||
user.set_password(newPassword)
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
+4
-2
@@ -6,15 +6,17 @@ colorama==0.4.4
|
||||
Flask==2.0.1
|
||||
Flask-Login==0.5.0
|
||||
Flask-Migrate==3.0.1
|
||||
Flask-RESTful==0.3.9
|
||||
Flask-Pydantic==0.9.0
|
||||
Flask-SQLAlchemy==2.5.1
|
||||
greenlet==1.1.0
|
||||
gunicorn==20.1.0
|
||||
itsdangerous==2.0.1
|
||||
Jinja2==3.0.1
|
||||
Mako==1.1.4
|
||||
MarkupSafe==2.0.1
|
||||
Pillow==8.2.0
|
||||
psutil==5.8.0
|
||||
pydantic==1.9.1
|
||||
PyMySQL==1.0.2
|
||||
python-dateutil==2.8.1
|
||||
python-dotenv==0.18.0
|
||||
@@ -22,5 +24,5 @@ python-editor==1.0.4
|
||||
pytz==2021.1
|
||||
six==1.16.0
|
||||
SQLAlchemy==1.4.18
|
||||
typing_extensions==4.2.0
|
||||
Werkzeug==2.0.1
|
||||
gunicorn==20.1.0
|
||||
@@ -148,6 +148,7 @@
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
iconPicker.render({
|
||||
// 选择器,推荐使用input
|
||||
elem: '#icon',
|
||||
|
||||
@@ -62,8 +62,9 @@
|
||||
|
||||
$.ajax({
|
||||
url: '/api/v1/roles/role_power/' + data.field.roleId,
|
||||
data: data.field,
|
||||
data: JSON.stringify(data.field),
|
||||
dataType: 'json',
|
||||
contentType: 'application/json',
|
||||
type: 'put',
|
||||
success: function(result) {
|
||||
if (result.success) {
|
||||
|
||||
Reference in New Issue
Block a user