diff --git a/applications/api/rights/department.py b/applications/api/rights/department.py index be1dcb7..5db8901 100644 --- a/applications/api/rights/department.py +++ b/applications/api/rights/department.py @@ -3,14 +3,12 @@ from flask_restful import Resource from flask_restful import marshal, reqparse from applications.common.utils.http import success_api, fail_api -from applications.common.utils.rights import authorize from applications.extensions import db from applications.models import CompanyDepartment, CompanyUser class DepartmentsResource(Resource): - @authorize("admin:dept:main", log=True) def get(self): dept_data = CompanyDepartment.query.order_by(CompanyDepartment.sort).all() # TODO dtree 需要返回状态信息 @@ -21,7 +19,6 @@ class DepartmentsResource(Resource): print(dept_data) return jsonify(res) - @authorize("admin:dept:add", log=True) def post(self): parser = reqparse.RequestParser() parser.add_argument('address', type=str) @@ -52,7 +49,6 @@ class DepartmentsResource(Resource): class DepartmentResource(Resource): - @authorize("admin:dept:edit", log=True) def get(self, dept_id): dept = CompanyDepartment.query.filter_by(id=dept_id).first() dept_data = { @@ -65,10 +61,8 @@ class DepartmentResource(Resource): 'sort': dept.sort, 'address': dept.address, } - # return make_response(render_template('department/edit.html', dept=dept)) return dict(success=True, message='ok', dept=dept_data) - @authorize("admin:dept:edit", log=True) def put(self, dept_id): parser = reqparse.RequestParser() parser.add_argument('address', type=str) @@ -95,7 +89,6 @@ class DepartmentResource(Resource): db.session.commit() return success_api(message="更新成功") - @authorize("admin:dept:remove", log=True) def delete(self, dept_id): ret = CompanyDepartment.query.filter_by(id=dept_id).delete() CompanyUser.query.filter_by(dept_id=dept_id).update({"dept_id": None}) @@ -106,7 +99,6 @@ class DepartmentResource(Resource): class DeptEnableResource(Resource): - @authorize("admin:dept:edit", log=True) def put(self, dept_id): d = CompanyDepartment.query.get(dept_id) if d: diff --git a/applications/api/rights/rights.py b/applications/api/rights/rights.py index f7c2a50..d0237b5 100644 --- a/applications/api/rights/rights.py +++ b/applications/api/rights/rights.py @@ -2,11 +2,10 @@ import copy from collections import OrderedDict from flask import request, jsonify, current_app -from flask_login import current_user, login_required +from flask_login import current_user from flask_restful import Resource, reqparse, marshal from applications.common.utils.http import success_api, fail_api -from applications.common.utils.rights import authorize from applications.extensions import db from applications.models import RightsPower, RightsRole @@ -153,7 +152,6 @@ parser_power.add_argument('sort', type=int, dest='sort') class RightRightsResource(Resource): - @authorize("admin:power:main", log=True) def get(self): """获取选择父节点""" @@ -167,7 +165,6 @@ class RightRightsResource(Resource): } return res - @authorize("admin:power:remove", log=True) def delete(self): ids = request.form.getlist('ids[]') batch_remove_power(ids) @@ -176,7 +173,6 @@ class RightRightsResource(Resource): class RightPowerResource(Resource): - @authorize("admin:power:add", log=True) def post(self, power_id): res = parser_power.parse_args() power = RightsPower( @@ -199,7 +195,6 @@ class RightPowerResource(Resource): return success_api(message="成功") - @authorize("admin:power:remove", log=True) def delete(self, power_id): # 删除权限(目前没有判断父节点自动删除子节点) power = RightsPower.query.filter_by(id=power_id).first() @@ -218,7 +213,6 @@ class RightPowerResource(Resource): else: return fail_api(message="删除失败") - @authorize("admin:power:edit", log=True) def put(self, power_id): res = parser_power.parse_args() @@ -241,7 +235,6 @@ class RightPowerResource(Resource): class RightPowerEnableResource(Resource): - @authorize("admin:power:edit", log=True) def put(self, right_id): power = RightsPower.query.get(right_id) @@ -255,13 +248,11 @@ class RightPowerEnableResource(Resource): class AdminConfigsResource(Resource): - @login_required def get(self): return get_render_config() class AdminMenuResource(Resource): - @login_required def get(self): menu_tree = make_menu_tree() return jsonify(menu_tree) diff --git a/applications/api/rights/roles.py b/applications/api/rights/roles.py index 5ed4657..9a62d56 100644 --- a/applications/api/rights/roles.py +++ b/applications/api/rights/roles.py @@ -1,8 +1,6 @@ -from flask_login import login_required from flask_restful import Resource, reqparse, marshal from applications.common.utils.http import table_api, success_api, fail_api -from applications.common.utils.rights import authorize from applications.extensions import db from applications.models import RightsPower, RightsRole, CompanyUser @@ -37,7 +35,6 @@ def batch_remove_role(role_ids): class RoleRolesResource(Resource): # 表格数据 - @authorize("admin:role:main", log=True) def get(self): parser = reqparse.RequestParser(bundle_errors=True) parser.add_argument('page', type=int, default=1) @@ -66,8 +63,6 @@ class RoleRolesResource(Resource): 'total': paginate.total} , code=0) - @authorize("admin:role:remove", log=True) - @login_required def delete(self): parser = reqparse.RequestParser() parser.add_argument('ids[]', action='append', dest='ids') @@ -80,7 +75,6 @@ class RoleRolesResource(Resource): class RoleRoleResource(Resource): - @authorize("admin:role:add", log=True) def post(self, role_id): parser = reqparse.RequestParser() parser.add_argument('details', type=str) @@ -103,7 +97,6 @@ class RoleRoleResource(Resource): return success_api(message="成功") # 更新角色 - @authorize("admin:role:edit", log=True) def put(self, role_id): parser = reqparse.RequestParser() parser.add_argument('roleId', dest='role_id', type=int) @@ -133,7 +126,6 @@ class RoleRoleResource(Resource): class RoleEnableResource(Resource): """启用用户""" - @authorize("admin:role:edit", log=True) def put(self, role_id): ret = RightsRole.query.get(role_id) ret.enable = not ret.enable @@ -147,7 +139,6 @@ class RoleEnableResource(Resource): class RolePowerResource(Resource): - @authorize("admin:role:main", log=True) def get(self, role_id): # 获取角色权限 role = RightsRole.query.filter_by(id=role_id).first() @@ -166,7 +157,6 @@ class RolePowerResource(Resource): } # 保存角色权限 - @authorize("admin:role:edit", log=True) def put(self, role_id): parser = reqparse.RequestParser() parser.add_argument('powerIds', dest='power_ids') @@ -190,7 +180,6 @@ class RolePowerResource(Resource): return success_api(message="授权成功") # 角色删除 - @authorize("admin:role:remove", log=True) def delete(self, role_id): print(role_id) res = remove_role(role_id) diff --git a/applications/api/system/file.py b/applications/api/system/file.py index 1c40163..5ec5495 100644 --- a/applications/api/system/file.py +++ b/applications/api/system/file.py @@ -5,7 +5,6 @@ from flask_restful import Resource, marshal from sqlalchemy import desc from applications.common.utils.http import fail_api, success_api, table_api -from applications.common.utils.rights import authorize from applications.common.utils.upload import upload_one, delete_photo_by_id from applications.extensions import db from applications.models import FilePhoto @@ -13,7 +12,6 @@ from applications.models import FilePhoto class FilePhotosResource(Resource): - @authorize("admin:file:main", log=True) def get(self): page = request.args.get('page', type=int) limit = request.args.get('limit', type=int) @@ -26,7 +24,6 @@ class FilePhotosResource(Resource): 'total': photo_paginate.total, }, code=0) - @authorize("admin:file:add", log=True) def post(self): if 'file' in request.files: photo = request.files['file'] @@ -43,7 +40,6 @@ class FilePhotosResource(Resource): return jsonify(res) return fail_api() - @authorize("admin:file:delete", log=True) def delete(self): """图片批量删除""" # TODO bugs 图片删除失败 @@ -63,7 +59,6 @@ class FilePhotosResource(Resource): class FilePhotoResource(Resource): """图片数据""" - @authorize("admin:file:delete", log=True) def delete(self, photo_id): res = delete_photo_by_id(photo_id) if res: diff --git a/applications/api/system/passport.py b/applications/api/system/passport.py index 8f3025b..0781b1f 100644 --- a/applications/api/system/passport.py +++ b/applications/api/system/passport.py @@ -1,5 +1,5 @@ from flask import render_template, make_response -from flask import session, redirect, url_for, request +from flask import session, redirect, url_for from flask_login import current_user, login_user from flask_restful import Resource, reqparse @@ -10,10 +10,6 @@ from applications.models import CompanyUser class LoginResource(Resource): - login_req = reqparse.RequestParser(bundle_errors=True) - login_req.add_argument('username', type=str, help='请输入用户名', required=True) - login_req.add_argument('password', type=str, help='请输入密码', required=True) - login_req.add_argument('captcha', type=str, help='请输入验证码', required=True) def get(self): if current_user.is_authenticated: @@ -21,8 +17,11 @@ class LoginResource(Resource): return make_response(render_template('index/login.html')) def post(self): - - req = self.login_req.parse_args() + login_req = reqparse.RequestParser(bundle_errors=True) + login_req.add_argument('username', type=str, help='请输入用户名', required=True) + login_req.add_argument('password', type=str, help='请输入密码', required=True) + login_req.add_argument('captcha', type=str, help='请输入验证码', required=True) + req = login_req.parse_args() s_code = session.get("code", None) diff --git a/applications/api/users/profile.py b/applications/api/users/profile.py index e3305e3..275a25b 100644 --- a/applications/api/users/profile.py +++ b/applications/api/users/profile.py @@ -47,7 +47,6 @@ class UserAvatarResource(Resource): class UserInfoResource(Resource): - @login_required def put(self, user_id): parser = reqparse.RequestParser() parser.add_argument('realName', type=str, dest='real_name') @@ -70,7 +69,6 @@ class UserInfoResource(Resource): class UserPasswordResource(Resource): """前用户密码""" - @login_required def put(self, user_id): parser = reqparse.RequestParser() parser.add_argument('oldPassword', type=str, required=True, help='旧密码不得为空') diff --git a/applications/api/users/user.py b/applications/api/users/user.py index 81c4b7b..ae05966 100644 --- a/applications/api/users/user.py +++ b/applications/api/users/user.py @@ -4,10 +4,9 @@ from flask_restful import Resource, reqparse from sqlalchemy import desc from applications.common.utils.http import fail_api, success_api, table_api -from applications.common.utils.rights import authorize from applications.extensions import db -from applications.models import LoggingModel from applications.models import CompanyUser, RightsRole, CompanyDepartment +from applications.models import LoggingModel def get_current_user_logs(): @@ -60,7 +59,6 @@ def update_user_role(_id, roles_list): class UserUsersResource(Resource): """用户列表数据操作""" - @authorize("admin:user:main", log=True) def get(self): parser = reqparse.RequestParser() parser.add_argument('page', type=int, default=1) @@ -98,7 +96,6 @@ class UserUsersResource(Resource): 'total': paginate.total} , code=0) - @authorize("admin:user:add", log=True) def post(self): """新建单个用户""" parser = reqparse.RequestParser() @@ -130,7 +127,6 @@ class UserUsersResource(Resource): return success_api(message="增加成功", code=0) - @authorize("admin:user:remove", log=True) def delete(self): """批量删除""" ids = request.form.getlist('ids[]') @@ -141,7 +137,6 @@ class UserUsersResource(Resource): class UserUserResource(Resource): """修改用户数据""" - @authorize("admin:user:add", log=True) def post(self, user_id): """新建单个用户""" parser = reqparse.RequestParser() @@ -173,7 +168,6 @@ class UserUserResource(Resource): return success_api(message="增加成功", code=0) - @authorize("admin:user:remove", log=True) def delete(self, user_id): # 删除用户 res = delete_by_id(user_id) @@ -183,7 +177,6 @@ class UserUserResource(Resource): class UserRoleResource(Resource): - @authorize("admin:user:edit", log=True) def put(self, user_id): parser = reqparse.RequestParser() parser.add_argument('roleIds', type=str, dest='role_ids') diff --git a/applications/common/setting.py b/applications/common/setting.py deleted file mode 100644 index 2374dfe..0000000 --- a/applications/common/setting.py +++ /dev/null @@ -1,17 +0,0 @@ -# -MYSQL_HOST = '127.0.0.1' -MYSQL_PORT = '3306' -MYSQL_DATABASE = 'PearAdminFlask' -MYSQL_USERNAME = 'root' -MYSQL_PASSWORD = 'root' - -MYSQL_DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME, - password=PASSWORD, - host=HOST, - port=PORT, - db=DATABASE) - -SQLALCHEMY_DATABASE_URI = MYSQL_DB_URI -SQLALCHEMY_TRACK_MODIFICATIONS = True -SQLALCHEMY_ECHO = False -SQLALCHEMY_POOL_RECYCLE = 8 diff --git a/applications/common/utils/rights.py b/applications/common/utils/rights.py index f7f7286..93df175 100644 --- a/applications/common/utils/rights.py +++ b/applications/common/utils/rights.py @@ -59,24 +59,3 @@ def permission_required(permission: str) -> t.Callable: return wrapper return decorator - - -def authorize(power: str, log: bool = False): - def decorator(func): - @login_required - @wraps(func) - def wrapper(*args, **kwargs): - if power not in session.get('permissions'): - if log: - record_logging() - if request.method == 'GET': - abort(403) - else: - return jsonify(success=False, msg="权限不足!") - if log: - record_logging() - return func(*args, **kwargs) - - return wrapper - - return decorator diff --git a/applications/configs/init_data/cp_dept.json b/applications/configs/init_data/cp_dept.json index 87aedd0..960fbc1 100644 --- a/applications/configs/init_data/cp_dept.json +++ b/applications/configs/init_data/cp_dept.json @@ -8,7 +8,7 @@ "phone": "12312345679", "email": "123qq.com", "status": 1, - "remark": null, + "comment": null, "address": "这是总公司", "create_at": null, "update_at": "2021-06-01 17:23:20" @@ -22,7 +22,7 @@ "phone": "12312345678", "email": "1234qq.com", "status": 1, - "remark": null, + "comment": null, "address": "这是济南", "create_at": "2021-06-01 17:24:33", "update_at": "2021-06-01 17:25:19" @@ -36,7 +36,7 @@ "phone": "12312345678", "email": "123@qq.com", "status": 1, - "remark": null, + "comment": null, "address": "这是唐山", "create_at": "2021-06-01 17:25:15", "update_at": "2021-06-01 17:25:20" @@ -50,7 +50,7 @@ "phone": "12312345678", "email": "123@qq.com", "status": 1, - "remark": null, + "comment": null, "address": "测试", "create_at": "2021-06-01 17:27:39", "update_at": "2021-06-01 17:27:39" @@ -64,7 +64,7 @@ "phone": "12312345678", "email": "123@qq.com", "status": 1, - "remark": null, + "comment": null, "address": "测试部", "create_at": "2021-06-01 17:28:27", "update_at": "2021-06-01 17:28:27" diff --git a/applications/configs/init_data/cp_user.json b/applications/configs/init_data/cp_user.json index a2ef7e7..49794f5 100644 --- a/applications/configs/init_data/cp_user.json +++ b/applications/configs/init_data/cp_user.json @@ -1 +1,38 @@ -[{"id": 1, "username": "admin", "password_hash": "pbkdf2:sha256:150000$raM7mDSr$58fe069c3eac01531fc8af85e6fc200655dd2588090530084d182e6ec9d52c85", "create_at": null, "update_at": "2021-06-01 17:28:55", "enable": 1, "realname": "超级管理", "remark": "要是不能把握时机,就要终身蹭蹬,一事无成!", "avatar": "http://127.0.0.1:5000/_uploads/photos/1617291580000.jpg", "dept_id": 1}, {"id": 7, "username": "test", "password_hash": "pbkdf2:sha256:150000$cRS8bYNh$adb57e64d929863cf159f924f74d0634f1fecc46dba749f1bfaca03da6d2e3ac", "create_at": "2021-03-22 20:03:42", "update_at": "2021-06-01 17:29:47", "enable": 1, "realname": "超级管理", "remark": "要是不能把握时机,就要终身蹭蹬,一事无成", "avatar": "/static/admin/admin/images/avatar.jpg", "dept_id": 1}, {"id": 8, "username": "wind", "password_hash": "pbkdf2:sha256:150000$skME1obT$6a2c20cd29f89d7d2f21d9e373a7e3445f70ebce3ef1c3a555e42a7d17170b37", "create_at": "2021-06-01 17:30:39", "update_at": "2021-06-01 17:30:52", "enable": 1, "realname": "风", "remark": null, "avatar": "/static/admin/admin/images/avatar.jpg", "dept_id": 7}] \ No newline at end of file +[ + { + "id": 1, + "username": "admin", + "password_hash": "pbkdf2:sha256:150000$raM7mDSr$58fe069c3eac01531fc8af85e6fc200655dd2588090530084d182e6ec9d52c85", + "create_at": null, + "update_at": "2021-06-01 17:28:55", + "enable": 1, + "realname": "超级管理", + "remark": "要是不能把握时机,就要终身蹭蹬,一事无成!", + "avatar": "http://127.0.0.1:5000/_uploads/photos/1617291580000.jpg", + "dept_id": 1 + }, + { + "id": 7, + "username": "test", + "password_hash": "pbkdf2:sha256:150000$cRS8bYNh$adb57e64d929863cf159f924f74d0634f1fecc46dba749f1bfaca03da6d2e3ac", + "create_at": "2021-03-22 20:03:42", + "update_at": "2021-06-01 17:29:47", + "enable": 1, + "realname": "超级管理", + "remark": "要是不能把握时机,就要终身蹭蹬,一事无成", + "avatar": "/static/admin/admin/images/avatar.jpg", + "dept_id": 1 + }, + { + "id": 8, + "username": "wind", + "password_hash": "pbkdf2:sha256:150000$skME1obT$6a2c20cd29f89d7d2f21d9e373a7e3445f70ebce3ef1c3a555e42a7d17170b37", + "create_at": "2021-06-01 17:30:39", + "update_at": "2021-06-01 17:30:52", + "enable": 1, + "realname": "风", + "remark": null, + "avatar": "/static/admin/admin/images/avatar.jpg", + "dept_id": 7 + } +] \ No newline at end of file diff --git a/applications/configs/init_data/rt_role.json b/applications/configs/init_data/rt_role.json index 531999c..bafec61 100644 --- a/applications/configs/init_data/rt_role.json +++ b/applications/configs/init_data/rt_role.json @@ -1 +1,24 @@ -[{"id": 1, "name": "管理员", "code": "admin", "remark": null, "details": "管理员", "sort": 1, "create_time": null, "update_time": null, "enable": 1}, {"id": 2, "name": "普通用户", "code": "common", "remark": null, "details": "只有查看,没有增删改权限", "sort": 2, "create_time": "2021-03-22 20:02:38", "update_time": "2021-04-01 22:29:56", "enable": 1}] \ No newline at end of file +[ + { + "id": 1, + "name": "管理员", + "code": "admin", + "remark": null, + "details": "管理员", + "sort": 1, + "create_time": null, + "update_time": null, + "enable": 1 + }, + { + "id": 2, + "name": "普通用户", + "code": "common", + "remark": null, + "details": "只有查看,没有增删改权限", + "sort": 2, + "create_time": "2021-03-22 20:02:38", + "update_time": "2021-04-01 22:29:56", + "enable": 1 + } +] \ No newline at end of file diff --git a/applications/view/file.py b/applications/view/file.py index 7226c88..90b67d3 100644 --- a/applications/view/file.py +++ b/applications/view/file.py @@ -1,7 +1,7 @@ from flask import render_template from applications.view import index_bp -from applications.common.utils.rights import authorize, view_logging_required, permission_required +from applications.common.utils.rights import view_logging_required, permission_required @index_bp.get('/file') diff --git a/applications/view/logs_view.py b/applications/view/logs_view.py index f152d81..5b26311 100644 --- a/applications/view/logs_view.py +++ b/applications/view/logs_view.py @@ -3,7 +3,7 @@ from sqlalchemy import desc from flask_restful import marshal from applications.common.utils.http import table_api -from applications.common.utils.rights import authorize, permission_required +from applications.common.utils.rights import permission_required from applications.models import LoggingModel logs_bp = Blueprint('logs', __name__, url_prefix='/logs') diff --git a/applications/view/rights.py b/applications/view/rights.py index ee53279..bdbad13 100644 --- a/applications/view/rights.py +++ b/applications/view/rights.py @@ -1,6 +1,6 @@ from flask import render_template -from applications.common.utils.rights import authorize, permission_required, view_logging_required +from applications.common.utils.rights import permission_required, view_logging_required from applications.models import RightsPower from applications.view import index_bp diff --git a/applications/view/roles.py b/applications/view/roles.py index e665950..3cc27ab 100644 --- a/applications/view/roles.py +++ b/applications/view/roles.py @@ -1,6 +1,6 @@ from flask import Blueprint, render_template -from applications.common.utils.rights import authorize, permission_required, view_logging_required +from applications.common.utils.rights import permission_required, view_logging_required from applications.models import RightsRole diff --git a/applications/view/users.py b/applications/view/users.py index f6e21bb..7db34d2 100644 --- a/applications/view/users.py +++ b/applications/view/users.py @@ -2,7 +2,7 @@ from flask import render_template from flask_login import login_required, current_user from sqlalchemy import desc -from applications.common.utils.rights import authorize, permission_required, view_logging_required +from applications.common.utils.rights import permission_required, view_logging_required from applications.models import LoggingModel, RightsRole, CompanyUser from . import index_bp