zhaoqingang
2024-12-23 633a8ed975625851f23398f896594581c179f612
app/service/user.py
@@ -1,10 +1,12 @@
import time
from datetime import datetime
from traceback import print_tb
from app.api import pwd_context
from app.api.dialog import dialog_list
from app.config.config import settings
from app.config.const import RAGFLOW, BISHENG, DIFY, USER_STATSU_DELETE, ROLE_STATUS_ON, DEPT_STATUS_ON
from app.config.const import RAGFLOW, BISHENG, DIFY, USER_STATSU_DELETE, ROLE_STATUS_ON, DEPT_STATUS_ON, \
    Dialog_STATSU_ON
from app.models import RoleModel, GroupModel, AgentType, role_resource_table, DialogModel, OrganizationModel, \
    ResourceModel
from app.models.menu_model import WebMenuModel, MenuCapacityModel
@@ -107,6 +109,8 @@
async def edit_user_data(db, user_id, email, phone, login_name, roles, groups):
    try:
        print(121221)
        print(roles)
        user = db.query(UserModel).filter(UserModel.id == user_id).first()
        user.email = email
        user.phone = phone
@@ -116,6 +120,7 @@
        user.roles = [db.get(RoleModel, roleId) for roleId in roles]
        # user.groups = [db.get(GroupModel, groupId) for groupId in groups]
        db.commit()
        print(4343)
    except Exception as e:
        logger.error(e)
        db.rollback()
@@ -201,35 +206,37 @@
    role_set = set()
    dept_set = set()
    user = db.query(UserModel).filter_by(id=user_id).first()
    parent_resource = db.query(ResourceModel).filter(ResourceModel.status == DEPT_STATUS_ON, ResourceModel.resource_id == None).first()
    parent_id = ""
    print(user_id)
    if parent_resource:
        parent_id = parent_resource.id
    tmp_dit = {}
    if user.permission == "admin":
        dept_list = db.query(ResourceModel).filter(ResourceModel.status==DEPT_STATUS_ON, ResourceModel.resource_type_id != "1").all()
        for dept in dept_list:
            if not dept.resource_id:
                parent_id = dept.id
                continue
            permissions[dept.id] = dept.to_router_dict()
            permissions[dept.id] = dept
    else:
        async def role_resource(role_set, permissions, roles):
            nonlocal parent_id
            for role in roles:
                print(role.name)
                if role.id not in role_set and role.status == ROLE_STATUS_ON:
                    role_set.add(role.id)
                    for r in role.resources:
                        if r.resource_type_id != "1" and r.status==DEPT_STATUS_ON:
                            if not r.resource_id:
                                parent_id = r.id
                                continue
                            permissions[r.id] = r.to_router_dict()
                            permissions[r.id] = r
        await role_resource(role_set, permissions, user.roles)
        for ogt in user.organizations:
            print(ogt.name)
            if ogt.status != DEPT_STATUS_ON:
                continue
            print(ogt.name)
            if ogt.roles:
                await role_resource(role_set, permissions, user.roles)
                print(9877)
                await role_resource(role_set, permissions,ogt.roles)
            parent_ogt = ogt.parent
            while parent_ogt:
                if parent_ogt.id not in dept_set:
@@ -238,12 +245,29 @@
                    parent_ogt = parent_ogt.parent
                else:
                    break
    # print(permissions.keys())
    def get_parent(parent, permissions):
        # print(parent.id)
        # nonlocal permissions
        if parent.id not in permissions:
    for permission in permissions.values():
            permissions[parent.id] = parent  # .to_router_dict()
            # print(permissions.keys())
            parent = parent.parent
            if parent:
                get_parent(parent, permissions)
    # permission_list = []
    for permission in list(permissions.values()):
        if permission.parent:
            get_parent(permission.parent, permissions)
    permission_list = [p.to_router_dict() for p in permissions.values()]
    for permission in permission_list:
        tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission]
    # print(permissions.keys())
    def get_child(parent_id):
        res = permissions[parent_id]
        # if parent_id in tmp_dit:
        res = permissions[parent_id].to_router_dict()
        res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
        return res
@@ -256,12 +280,17 @@
    res = []
    # print(user_id)
    user = db.query(UserModel).filter_by(id=user_id).first()
    for group in user.groups:
        for dialog in group.dialogs:
            dialog_list.append(dialog.id)
    if user.permission == "admin":
        dialog_list = [i.id for i in db.query(DialogModel).filter(DialogModel.status==Dialog_STATSU_ON).all()]
    else:
        for group in user.groups:
            for dialog in group.dialogs:
                dialog_list.append(dialog.id)
    # print(dialog_list)
    menu_list = db.query(WebMenuModel.id, WebMenuModel.title, WebMenuModel.describe, WebMenuModel.icon, WebMenuModel.desc,WebMenuModel.rank,
                         WebMenuModel.img, MenuCapacityModel.capacity_id, MenuCapacityModel.capacity_type, MenuCapacityModel.chat_id.label("agentId")).outerjoin(
                         WebMenuModel.img, MenuCapacityModel.capacity_id, MenuCapacityModel.capacity_type, MenuCapacityModel.chat_id.label("agentId"), MenuCapacityModel.chat_type).outerjoin(
        MenuCapacityModel, WebMenuModel.id == MenuCapacityModel.menu_id).outerjoin(
        DialogModel, MenuCapacityModel.capacity_id == DialogModel.id).filter(DialogModel.status=="1").all()
@@ -277,14 +306,16 @@
                break
        else:
            res.append({
            'id': menus[0].id,
            'title': menus[0].title,
            'menuId': menus[0].id,
            'name': menus[0].title,
            'icon': menus[0].icon,
            'img': menus[0].img,
            'desc': menus[0].desc,
            'dialog': menus[0].describe,
            'agentId': menus[0].agentId,
            'rank': menus[0].rank
            'id': menus[0].agentId,
            'rank': menus[0].rank,
            'agent_type': menus[0].capacity_type,
            'type': menus[0].chat_type
        })
    return sorted(res, key=lambda x: x['rank'], reverse=True)
@@ -307,15 +338,15 @@
                for r in role.resources:
                    if r.resource_type_id != "1":
                        if not r.resource_id:
                            parent_id = r.id
                            continue
                    #     if not r.resource_id:
                    #         parent_id = r.id
                    #         continue
                        permissions[r.id] = r.to_router_dict()
    await role_resource(role_set, permissions, user.roles)
    for ogt in user.organizations:
        if ogt.roles:
            await role_resource(role_set, permissions, user.roles)
            await role_resource(role_set, permissions, ogt.roles)
        parent_ogt = ogt.parent
        while parent_ogt:
@@ -327,16 +358,17 @@
            else:
                break
    tmp_dit = {}
    for permission in permissions.values():
        tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission]
    # tmp_dit = {}
    # for permission in permissions.values():
    #     tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission]
    #
    # def get_child(parent_id):
    #     res = permissions[parent_id]
    #     res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
    #     return res
    def get_child(parent_id):
        res = permissions[parent_id]
        res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
        return res
    res["menus"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
    # res["menus"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
    res["menus"] = list(permissions.values())
    for group in user.groups:
        for klg in group.knowledges:
            knowledge_dict[klg.id] = klg.to_json()