feature: 完成角色授权
This commit is contained in:
+11
-11
@@ -17,16 +17,16 @@ def create_app(config_name="dev"):
|
||||
|
||||
register_views(app)
|
||||
|
||||
@app.errorhandler(403)
|
||||
def handle_404(e):
|
||||
return render_template("error/403.html")
|
||||
|
||||
@app.errorhandler(404)
|
||||
def handle_403(e):
|
||||
return render_template("error/404.html")
|
||||
|
||||
@app.errorhandler(500)
|
||||
def handle_500(e):
|
||||
return render_template("error/500.html")
|
||||
# @app.errorhandler(403)
|
||||
# def handle_404(e):
|
||||
# return render_template("error/403.html")
|
||||
#
|
||||
# @app.errorhandler(404)
|
||||
# def handle_403(e):
|
||||
# return render_template("error/404.html")
|
||||
#
|
||||
# @app.errorhandler(500)
|
||||
# def handle_500(e):
|
||||
# return render_template("error/500.html")
|
||||
|
||||
return app
|
||||
|
||||
+68
-1
@@ -1,8 +1,10 @@
|
||||
from copy import deepcopy
|
||||
|
||||
from flask import Blueprint, request
|
||||
from flask_sqlalchemy.pagination import Pagination
|
||||
|
||||
from pear_admin.extensions import db
|
||||
from pear_admin.orms import RoleORM
|
||||
from pear_admin.orms import RightsORM, RoleORM
|
||||
|
||||
role_api = Blueprint("role", __name__)
|
||||
|
||||
@@ -50,3 +52,68 @@ def del_role(rid):
|
||||
role_obj = RoleORM.query.get(rid)
|
||||
role_obj.delete()
|
||||
return {"code": 0, "message": "删除角色成功"}
|
||||
|
||||
|
||||
@role_api.get("/role/role_rights/<int:rid>")
|
||||
def role_rights(rid):
|
||||
role: RoleORM = db.session.execute(
|
||||
db.select(RoleORM).where(RoleORM.id == rid)
|
||||
).scalar()
|
||||
|
||||
t = request.args.get("type")
|
||||
if t == "tree":
|
||||
# 1. 获取所有的权限
|
||||
rights_all = db.session.execute(db.select(RightsORM)).scalars()
|
||||
rights_list = [
|
||||
{"id": r.id, "pid": r.pid, "title": r.name, "sort": r.sort}
|
||||
for r in rights_all
|
||||
]
|
||||
# 2. 获取已有权限 id 集合
|
||||
own_rights_set = {r.id for r in role.rights_list}
|
||||
# 3. 列表转属性组件
|
||||
rights_list.sort(key=lambda item: (item["pid"], item["id"]), reverse=True)
|
||||
tree_dict = {}
|
||||
for rights_dict in rights_list: # 遍历子节点
|
||||
# 2. 如果当前阶段已经存在于树状表格字典,则是父节点
|
||||
if rights_dict["id"] in tree_dict.keys():
|
||||
# 将之前的节点添加到父节点之下
|
||||
rights_dict["children"] = deepcopy(tree_dict[rights_dict["id"]])
|
||||
rights_dict["children"].sort(key=lambda item: item["sort"])
|
||||
del tree_dict[rights_dict["id"]]
|
||||
|
||||
# 1. 如果父节点未出现在树状字典里面,就新增子节点列表,否则就追加
|
||||
if rights_dict["pid"] not in tree_dict.keys():
|
||||
if rights_dict["id"] in own_rights_set:
|
||||
rights_dict["checked"] = True
|
||||
tree_dict[rights_dict["pid"]] = [rights_dict]
|
||||
else:
|
||||
if rights_dict["id"] in own_rights_set:
|
||||
rights_dict["checked"] = True
|
||||
tree_dict[rights_dict["pid"]].append(rights_dict)
|
||||
|
||||
return {"code": 0, "data": tree_dict.get(0)}
|
||||
|
||||
return {
|
||||
"code": 0,
|
||||
"message": "返回角色权限数据成功",
|
||||
"data": [rights.json() for rights in role.rights_list],
|
||||
}
|
||||
|
||||
|
||||
@role_api.put("/role/role_rights/<int:rid>")
|
||||
def change_role_rights(rid):
|
||||
rights_ids = request.json.get("rights_ids", "")
|
||||
|
||||
rights_list = rights_ids.split(",")
|
||||
role: RoleORM = db.session.execute(
|
||||
db.select(RoleORM).where(RoleORM.id == rid)
|
||||
).scalar()
|
||||
rights_obj_list = db.session.execute(
|
||||
db.select(RightsORM).where(RightsORM.id.in_(rights_list))
|
||||
).all()
|
||||
print(role.rights_list)
|
||||
print([r[0] for r in rights_obj_list])
|
||||
role.rights_list = [r[0] for r in rights_obj_list]
|
||||
role.save()
|
||||
print(role.rights_list)
|
||||
return {"code": 0, "message": "授权成功"}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from flask import Blueprint, render_template
|
||||
from flask import Blueprint, render_template, send_from_directory
|
||||
from flask_jwt_extended import jwt_required
|
||||
|
||||
index_bp = Blueprint("index", __name__)
|
||||
@@ -29,3 +29,13 @@ def console1():
|
||||
@index_bp.route("/view/analysis/index.html")
|
||||
def analysis():
|
||||
return render_template("view/analysis/index.html")
|
||||
|
||||
|
||||
@index_bp.route("/view/system/person.html")
|
||||
def person():
|
||||
return render_template("view/system/person.html")
|
||||
|
||||
|
||||
@index_bp.route("/favicon.ico")
|
||||
def fav_icon():
|
||||
return send_from_directory(directory="static", path="favicon.ico")
|
||||
|
||||
@@ -1,23 +1,28 @@
|
||||
from flask import Blueprint, render_template
|
||||
|
||||
views_bp = Blueprint("views", __name__, url_prefix="/views")
|
||||
views_bp = Blueprint("views", __name__)
|
||||
|
||||
|
||||
@views_bp.get("/rights")
|
||||
@views_bp.get("/views/rights")
|
||||
def rights_view():
|
||||
return render_template("views/rights/index.html")
|
||||
|
||||
|
||||
@views_bp.get("/role")
|
||||
@views_bp.get("/views/role")
|
||||
def role_view():
|
||||
return render_template("views/role/index.html")
|
||||
|
||||
|
||||
@views_bp.get("/department")
|
||||
@views_bp.get("/views/role_rights/<int:rid>")
|
||||
def role_rights_view(rid):
|
||||
return render_template("views/role/role_rights.html", rid=rid)
|
||||
|
||||
|
||||
@views_bp.get("/views/department")
|
||||
def department_view():
|
||||
return render_template("views/department/index.html")
|
||||
|
||||
|
||||
@views_bp.get("/user")
|
||||
@views_bp.get("/views/user")
|
||||
def user_view():
|
||||
return render_template("views/user/index.html")
|
||||
|
||||
Reference in New Issue
Block a user