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) def role_deletes(): parser = reqparse.RequestParser() parser.add_argument('ids[]', action='append', dest='ids') res = parser.parse_args() batch_remove_role(res.ids) return success_api(message="批量删除成功") class RoleRoleApi(MethodView): def get(self, _id): if not _id: page = request.args.get('page', default=1, type=int) limit = request.args.get('limit', default=10, type=int) role_name = request.args.get('roleName', default="", type=str) role_code = request.args.get('roleCode', default="", type=str) filters = [] if role_name: filters.append(RoleModel.name.like('%' + role_name + '%')) if role_code: filters.append(RoleModel.code.like('%' + role_code + '%')) paginate = RoleModel.query.filter(*filters).paginate(page=page, per_page=limit, error_out=False) return table_api( result={ 'items': [{'id': item.id, 'roleName': item.name, 'roleCode': item.code, 'enable': item.enable, 'comment': item.comment, 'details': item.details, 'sort': item.sort, } for item in paginate.items], 'total': paginate.total} , code=0) def post(self): # TODO 添加校验 details = request.json.get('details', '') enable = request.json.get('enable', 0) role_code = request.json.get('roleCode', '') role_name = request.json.get('roleName', '') sort = request.json.get('sort', 0) role = RoleModel( details=details, enable=int(enable), code=role_code, name=role_name, sort=int(sort) ) db.session.add(role) db.session.commit() return success_api(message="成功") # 更新角色 def put(self, _id): # TODO 添加校验 role_code = request.json.get('roleCode', 0) role_name = request.json.get('roleName', '') sort = request.json.get('sort', 0) # int enable = request.json.get('enable', 0) # int details = request.json.get('details', '') data = { "code": role_code, "name": role_name, "sort": sort, "enable": enable, "details": details } role = RoleModel.query.filter_by(id=_id).update(data) db.session.commit() if not role: return fail_api(message="更新角色失败") return success_api(message="更新角色成功") def role_enable_resource(_id): """启用用户""" ret = RoleModel.query.get(_id) ret.enable = not ret.enable db.session.commit() message = "修改成功" if not ret: return fail_api(message="出错啦") return success_api(message=message) class RolePowerApi(MethodView): def get(self, _id): # 获取角色权限 role = RoleModel.query.filter_by(id=_id).first() # 获取权限列表的 id check_powers_list = [rp.id for rp in role.power] powers = RightModel.query.all() # 获取所有的权限 powers = [ { 'powerId': item.id, 'powerName': item.name, 'powerType': item.type, 'powerUrl': item.url, 'openType': item.open_type, 'parentId': item.parent_id, 'icon': item.icon, 'sort': item.sort, 'enable': item.enable, } for item in powers] for i in powers: if int(i.get("powerId")) in check_powers_list: i["checkArr"] = "1" else: i["checkArr"] = "0" return { "data": powers, "status": {"code": 200, "message": "默认"} } # 保存角色权限 def put(self, _id): power_ids = request.json.get('powerIds', '') power_list = power_ids.split(',') """ 更新角色权限 """ 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) db.session.commit() return success_api(message="授权成功") # 角色删除 def delete(self, _id): res = remove_role(_id) if not res: return fail_api(message="角色删除失败") return success_api(message="角色删除成功")