From de45d8dc19cd16b85344a3c3bbb243a12e8811a0 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期三, 13 十一月 2024 15:16:59 +0800 Subject: [PATCH] 增加功能 --- Log/__init__.py | 2 app/api/role.py | 24 ++-- app/models/resource_model.py | 5 app/service/organization.py | 4 app/service/group.py | 12 +- app/service/user.py | 11 +- app/service/knowledge.py | 0 app/api/group.py | 4 app/api/user.py | 4 app/service/resource.py | 44 ++++++++ app/api/resource.py | 32 ++++- app/models/role_model.py | 5 + /dev/null | 54 ---------- app/models/user_model.py | 1 app/api/knowledge.py | 30 ++++++ app/models/knowledge_model.py | 29 ++--- main.py | 2 app/models/group_model.py | 5 app/service/role.py | 28 +++- 19 files changed, 171 insertions(+), 125 deletions(-) diff --git a/app/Log/__init__.py b/Log/__init__.py similarity index 76% rename from app/Log/__init__.py rename to Log/__init__.py index 2a2c7cb..395b46d 100644 --- a/app/Log/__init__.py +++ b/Log/__init__.py @@ -5,7 +5,7 @@ logger = logging.getLogger() logger.setLevel(logging.INFO) # ch = logging.StreamHandler() - fh = logging.handlers.RotatingFileHandler("app/Log/log.log",mode="a",maxBytes = 100*1024, backupCount = 10, encoding='utf-8') + fh = logging.handlers.RotatingFileHandler("Log/log.log",mode="a",maxBytes = 100*1024, backupCount = 10, encoding='utf-8') formatter = logging.Formatter( "%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s -: %(message)s" ) diff --git a/app/Log/log.log b/app/Log/log.log deleted file mode 100644 index a12c025..0000000 --- a/app/Log/log.log +++ /dev/null @@ -1,54 +0,0 @@ -2024-11-11 16:33:10,255 - user - get_user_list - line:5 - ERROR - ffffffff -2024-11-12 09:39:26,980 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 09:39:27,541 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/regist "HTTP/1.1 201 Created" -2024-11-12 09:39:27,544 - user - create_user - line:61 - ERROR -: Failed to register with Ragflow: RagflowService.register() takes 3 positional arguments but 4 were given -2024-11-12 09:40:40,106 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 09:40:40,236 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/regist "HTTP/1.1 200 OK" -2024-11-12 09:40:40,237 - user - create_user - line:54 - ERROR -: Failed to register with Bisheng: Failed to fetch data from Bisheng API: {"status_code":500,"status_message":"??????????"} -2024-11-12 09:42:02,264 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 09:42:02,660 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/regist "HTTP/1.1 201 Created" -2024-11-12 09:42:04,209 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/register "HTTP/1.1 200 OK" -2024-11-12 11:45:21,621 - organization - create_dept - line:30 - ERROR -: 'orderNum' is an invalid keyword argument for OrganizationModel -2024-11-12 11:47:09,151 - organization - create_dept - line:30 - ERROR -: 'OrganizationModel' object has no attribute 'NAME' -2024-11-12 11:57:15,151 - organization - create_dept - line:30 - ERROR -: Can't flush None value found in collection OrganizationModel.groups -2024-11-12 15:59:58,270 - organization - delete_organization_info - line:87 - ERROR -: (pymysql.err.IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`rag_basic`.`organization_group`, CONSTRAINT `organization_group_ibfk_2` FOREIGN KEY (`organization_id`) REFERENCES `organization` (`id`))') -[SQL: DELETE FROM organization WHERE organization.id = %(id_1)s] -[parameters: {'id_1': 'e12a1067-cda5-4045-8479-a02c89ab9147'}] -(Background on this error at: https://sqlalche.me/e/20/gkpj) -2024-11-12 16:02:08,772 - organization - delete_organization_info - line:87 - ERROR -: (pymysql.err.IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`rag_basic`.`organization_role`, CONSTRAINT `organization_role_ibfk_2` FOREIGN KEY (`organization_id`) REFERENCES `organization` (`id`))') -[SQL: DELETE FROM organization WHERE organization.id = %(id_1)s] -[parameters: {'id_1': 'e12a1067-cda5-4045-8479-a02c89ab9147'}] -(Background on this error at: https://sqlalche.me/e/20/gkpj) -2024-11-12 16:05:07,805 - organization - delete_organization_info - line:87 - ERROR -: (pymysql.err.IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`rag_basic`.`organization_role`, CONSTRAINT `organization_role_ibfk_2` FOREIGN KEY (`organization_id`) REFERENCES `organization` (`id`))') -[SQL: DELETE FROM organization WHERE organization.id = %(id_1)s] -[parameters: {'id_1': 'e12a1067-cda5-4045-8479-a02c89ab9147'}] -(Background on this error at: https://sqlalche.me/e/20/gkpj) -2024-11-12 16:17:25,385 - organization - delete_organization_info - line:87 - ERROR -: (pymysql.err.IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`rag_basic`.`organization_role`, CONSTRAINT `organization_role_ibfk_2` FOREIGN KEY (`organization_id`) REFERENCES `organization` (`id`))') -[SQL: DELETE FROM organization WHERE organization.id = %(id_1)s] -[parameters: {'id_1': 'e12a1067-cda5-4045-8479-a02c89ab9147'}] -(Background on this error at: https://sqlalche.me/e/20/gkpj) -2024-11-12 18:04:30,742 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:04:31,217 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/login "HTTP/1.1 201 Created" -2024-11-12 18:04:31,679 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/login "HTTP/1.1 200 OK" -2024-11-12 18:05:55,757 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:05:56,206 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/login "HTTP/1.1 201 Created" -2024-11-12 18:05:56,684 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/login "HTTP/1.1 200 OK" -2024-11-12 18:09:19,985 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:09:20,395 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/regist "HTTP/1.1 201 Created" -2024-11-12 18:09:22,252 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/register "HTTP/1.1 200 OK" -2024-11-12 18:13:37,826 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:13:38,274 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/login "HTTP/1.1 201 Created" -2024-11-12 18:13:38,830 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/login "HTTP/1.1 200 OK" -2024-11-12 18:14:27,990 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:14:28,054 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/login "HTTP/1.1 201 Created" -2024-11-12 18:15:48,707 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:15:48,785 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/login "HTTP/1.1 201 Created" -2024-11-12 18:16:33,452 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:16:33,520 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/regist "HTTP/1.1 200 OK" -2024-11-12 18:16:33,521 - user - create_user - line:54 - ERROR -: Failed to register with Bisheng: Failed to fetch data from Bisheng API: {"status_code":500,"status_message":"??????????"} -2024-11-12 18:19:41,638 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:19:42,088 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/regist "HTTP/1.1 201 Created" -2024-11-12 18:19:43,242 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/register "HTTP/1.1 200 OK" -2024-11-12 18:19:56,167 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: GET http://192.168.20.119:13001/api/v1/user/public_key "HTTP/1.1 200 OK" -2024-11-12 18:19:56,420 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:13001/api/v1/user/login "HTTP/1.1 201 Created" -2024-11-12 18:19:56,815 - _client - _send_single_request - line:1786 - INFO -: HTTP Request: POST http://192.168.20.119:11080/v1/user/login "HTTP/1.1 200 OK" diff --git a/app/api/group.py b/app/api/group.py index e931fc3..3880bf8 100644 --- a/app/api/group.py +++ b/app/api/group.py @@ -15,7 +15,7 @@ @group_router.post("/group_list", response_model=Response) async def user_group_list(paras: PageParameter, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): - return Response(code=200, msg="", data=await group_list(db, paras.page_size, paras.page_index, paras.keyword)) + return Response(code=200, msg="", data=await group_list(db, paras.page_size, paras.page_index, paras.keyword, current_user.permission, current_user.id)) @group_router.post("/add_group", response_model=Response) @@ -25,7 +25,7 @@ db_group = db.query(GroupModel).filter(GroupModel.group_name == group.group_name).first() if db_group: return Response(code=200, msg="group already created") - is_create = await create_group(db, group.group_name, group.group_description) + is_create = await create_group(db, group.group_name, group.group_description, current_user.id) if not is_create: return Response(code=200, msg="group create failure", data={}) return Response(code=200, msg="group create successfully", data={"group_name": group.group_name}) diff --git a/app/api/knowledge.py b/app/api/knowledge.py new file mode 100644 index 0000000..91edec0 --- /dev/null +++ b/app/api/knowledge.py @@ -0,0 +1,30 @@ +# coding:utf-8 + +from fastapi import APIRouter, Depends +from app.api import Response, get_current_user, ResponseList +from app.models import RoleParameter, GroupModel, KnowledgeModel +from app.models.base_model import get_db +from app.models.user_model import UserModel + +knowledge_router = APIRouter() + +@knowledge_router.get("/list", response_model=Response) +async def knowledge_list(role:str, current_user: UserModel = Depends(get_current_user), + db=Depends(get_db)): + if role == "admin": + kld_list = db.query(KnowledgeModel).all() + else: + user = db.query(UserModel).filter(UserModel.id == current_user.id).first() + + group_list = [i.id for i in user.groups] + + kld_list = db.query(KnowledgeModel).filter(KnowledgeModel.tenant_id==current_user.id).all() + kld_set = set([i.id for i in kld_list]) + for group in db.query(GroupModel).filter(GroupModel.id.in_(group_list)).all(): + for k in group.knowledges: + if k.id not in kld_set: + kld_list.append(k) + kld_set.add(k.id) + + data = [kld.to_json() for kld in kld_list] + return Response(code=200, msg="", data={"rows": data}) \ No newline at end of file diff --git a/app/api/resource.py b/app/api/resource.py index c3abb75..c722bec 100644 --- a/app/api/resource.py +++ b/app/api/resource.py @@ -1,8 +1,10 @@ from fastapi import APIRouter, Depends from app.api import Response, pwd_context, get_current_user +from app.models import MenuInfo from app.models.base_model import get_db from app.models.user_model import UserModel -from app.service.resource import get_resource_tree, get_resource_info, delete_resource_info +from app.service.resource import get_resource_tree, get_resource_info, delete_resource_info, create_menu, \ + edit_resource_data menu_router = APIRouter() @@ -26,12 +28,24 @@ @menu_router.post("/add_menu", response_model=Response) -async def add_dept(dept: DeptInfo, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): - if not dept.deptName: - return Response(code=400, msg="The deptName cannot be empty!") - if dept.status not in ["0", "1"]: - return Response(code=400, msg="The status cannot be {}!".format(dept.status)) - is_create = await create_dept(db, dept.deptName, dept.leader, dept.phone, dept.address, dept.status, dept.orderNum, dept.roles, dept.groups, dept.parentId) +async def resource_add_menu(menu: MenuInfo, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): + if not menu.menuName: + return Response(code=400, msg="The menuName cannot be empty!") + if menu.status not in ["0", "1"]: + return Response(code=400, msg="The status cannot be {}!".format(menu.status)) + is_create = await create_menu(db, menu.menuName, menu.component, menu.path, menu.orderNum, menu.perms, menu.menuType, menu.description, menu.parentId, menu.status,menu.icon) if not is_create: - return Response(code=500, msg="dept create failure", data={}) - return Response(code=200, msg="dept create successfully", data={}) + return Response(code=500, msg="menu create failure", data={}) + return Response(code=200, msg="menu create successfully", data={}) + + +@menu_router.put("/edit_menu", response_model=Response) +async def resource_edit_menu(menu: MenuInfo, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): + if not menu.menuName: + return Response(code=400, msg="The menuName cannot be empty!") + if menu.status not in ["0", "1"]: + return Response(code=400, msg="The status cannot be {}!".format(menu.status)) + is_create = await edit_resource_data(db, menu.menuId, menu.menuName, menu.component, menu.path, menu.orderNum, menu.perms, menu.menuType, menu.description, menu.parentId, menu.status,menu.icon) + if not is_create: + return Response(code=500, msg="dept edit failure", data={}) + return Response(code=200, msg="dept edit successfully", data={}) diff --git a/app/api/role.py b/app/api/role.py index 1d54a6f..516619a 100644 --- a/app/api/role.py +++ b/app/api/role.py @@ -13,7 +13,8 @@ @role_router.get("/list", response_model=Response) async def user_group_list(paras: PageParameter, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): - return Response(code=200, msg="", data=await role_list(db, paras.page_size, paras.page_index, paras.keyword)) + + return Response(code=200, msg="", data=await role_list(db, paras.page_size, paras.page_index, paras.keyword, current_user.permission, current_user.id)) @role_router.post("/add_role", response_model=Response) @@ -23,7 +24,7 @@ db_role = db.query(RoleModel).filter(RoleModel.name == role.roleName).first() if db_role: return Response(code=200, msg="role already created") - is_create = await create_role(db, role.roleName, role.remark, current_user.id) + is_create = await create_role(db, role.roleName, role.remark, role.roleKey, role.dataScope,current_user.id) if not is_create: return Response(code=500, msg="role create failure", data={}) return Response(code=200, msg="role create successfully", data={"roleName": role.roleName}) @@ -53,16 +54,17 @@ @role_router.put("/edit_role", response_model=Response) async def edit_role_data(role: RoleEdit, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): - if not role.roleName: - return Response(code=400, msg="The roleName cannot be empty!") - db_role = db.query(RoleModel).filter(RoleModel.id == role.role_id).first() - if not db_role: - return Response(code=200, msg="role does not exist") + if role.editType == 1: + if not role.roleName: + return Response(code=400, msg="The roleName cannot be empty!") + db_role = db.query(RoleModel).filter(RoleModel.id == role.role_id).first() + if not db_role: + return Response(code=200, msg="role does not exist") - db_role = db.query(RoleModel).filter(RoleModel.name == role.roleName).first() - if db_role and db_role.id != role.role_id: - return Response(code=200, msg="role already created") - is_edit = await edit_role_resource(db, role.role_id,role.roleName, role.remark, role.resources) + db_role = db.query(RoleModel).filter(RoleModel.name == role.roleName).first() + if db_role and db_role.id != role.role_id: + return Response(code=200, msg="role already created") + is_edit = await edit_role_resource(db, role.role_id,role.roleName, role.remark, role.roleKey, role.dataScope, role.resources, role.editType) if not is_edit: return Response(code=500, msg="role edit failure", data={}) return Response(code=200, msg="role edit successfully", data={}) \ No newline at end of file diff --git a/app/api/user.py b/app/api/user.py index 4390296..5d1443e 100644 --- a/app/api/user.py +++ b/app/api/user.py @@ -11,7 +11,7 @@ @user_router.get("/list", response_model=Response) async def user_list(paras: PageParameter,current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): - return Response(code=200, msg="", data=await get_user_list(db, paras.page_size, paras.page_index, paras.keyword)) + return Response(code=200, msg="", data=await get_user_list(db, paras.page_size, paras.page_index, paras.keyword, current_user.permission, current_user.id)) @user_router.post("/add_user", response_model=Response) @@ -24,7 +24,7 @@ pwd = user.pwd if not pwd: pwd = "000000" - is_create = await create_user(db, user.userName, user.email, user.phone, user.loginName, pwd, user.roles, user.groups) + is_create = await create_user(db, user.userName, user.email, user.phone, user.loginName, pwd, user.roles, user.groups,current_user.id) if not is_create: return Response(code=500, msg="user create failure", data={}) return Response(code=200, msg="user create successfully", data={}) diff --git a/app/models/group_model.py b/app/models/group_model.py index a1ac287..b9c30e9 100644 --- a/app/models/group_model.py +++ b/app/models/group_model.py @@ -38,6 +38,7 @@ status = Column(String(10), nullable=False, default="1") created_at = Column(DateTime, default=datetime.now()) updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now()) + creator = Column(Integer) knowledges = relationship('KnowledgeModel', @@ -79,8 +80,8 @@ def __repr__(self): - return '<Role name:%r description:%r iconCls:%r seq:%r>\n' \ - % (self.NAME, self.DESCRIPTION, self.ICONCLS, self.SEQ) + return '<Role name:%r description:%r>\n' \ + % (self.group_name, self.group_description) def to_json(self): json = { diff --git a/app/models/knowledge_model.py b/app/models/knowledge_model.py index bde8241..1990e6e 100644 --- a/app/models/knowledge_model.py +++ b/app/models/knowledge_model.py @@ -1,5 +1,8 @@ +import json from datetime import datetime +from typing import Optional +from pydantic import BaseModel from sqlalchemy import Column, Integer, String, Table, ForeignKey, DateTime, BigInteger, Text, Float, Boolean from sqlalchemy.orm import relationship, backref @@ -18,7 +21,7 @@ tenant_id = Column(String(32)) # 鍒涘缓浜篿d description = Column(Text) # 璇存槑 status = Column(String(1)) # 鐘舵�� - kld_type = Column(String(1)) # 鐭ヨ瘑搴撳钩鍙� + # kld_type = Column(String(1)) # 鐭ヨ瘑搴撳钩鍙� def get_id(self): @@ -28,23 +31,17 @@ return { 'id': self.id, 'name': self.name, - 'create_time': self.create_time, - 'update_time': self.update_time, + 'create_time': self.create_date, + 'update_time': self.update_date, 'avatar': self.avatar, 'tenant_id': self.tenant_id, - 'language': self.language, 'description': self.description, - 'embd_id': self.embd_id, - 'permission': self.permission, - 'created_by': self.created_by, - 'doc_num': self.doc_num, - 'token_num': self.token_num, - 'chunk_num': self.chunk_num, - 'similarity_threshold': self.similarity_threshold, - 'vector_similarity_weight': self.vector_similarity_weight, - 'parser_id': self.parser_id, - 'parser_config': json.loads(self.parser_config), - 'status': self.status + 'status': self.status, + # 'kld_type': self.kld_type } def __repr__(self): - return '<Knowledge name:%r url:%r>\n' % (self.name, self.id) \ No newline at end of file + return '<Knowledge name:%r url:%r>\n' % (self.name, self.id) + + +class RoleParameter(BaseModel): + role: str \ No newline at end of file diff --git a/app/models/resource_model.py b/app/models/resource_model.py index 61e1bc9..405570e 100644 --- a/app/models/resource_model.py +++ b/app/models/resource_model.py @@ -151,7 +151,8 @@ perms: Optional[str] = "" menuType: Optional[str] = "" description: Optional[str] = "" + icon: Optional[str] = "" parentId: str status: str - roles: list - groups: Optional[list] = [] \ No newline at end of file + # roles: list + # groups: Optional[list] = [] \ No newline at end of file diff --git a/app/models/role_model.py b/app/models/role_model.py index e9b80bf..de18a04 100644 --- a/app/models/role_model.py +++ b/app/models/role_model.py @@ -69,6 +69,8 @@ class RoleData(BaseModel): remark: Optional[str] = "" roleName: str + roleKey: Optional[str] = "" + dataScope: Optional[str] = "" class RoleStatus(BaseModel): @@ -81,3 +83,6 @@ remark: Optional[str] = "" roleName: Optional[str] = "" resources: Optional[list] = [] + roleKey: Optional[str] = "" + dataScope: Optional[int] = 0 + editType: int diff --git a/app/models/user_model.py b/app/models/user_model.py index aea4cbd..8736ba0 100644 --- a/app/models/user_model.py +++ b/app/models/user_model.py @@ -34,6 +34,7 @@ status = Column(String(10), nullable=False, default="1") creator = Column(String(36)) sex = Column(String(1)) + permission = Column(String(16), nullable=False, default="1") age = Column(Integer) created_at = Column(DateTime, default=datetime.now()) updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now()) diff --git a/app/service/group.py b/app/service/group.py index 7519f65..903aa76 100644 --- a/app/service/group.py +++ b/app/service/group.py @@ -1,16 +1,16 @@ -from sqlalchemy.testing.pickleable import Order - from app.config.config import settings from app.models.group_model import GroupModel from app.models.user_model import UserModel from app.service.ragflow import RagflowService from app.service.token import get_ragflow_token -from app.Log import logger +from Log import logger -async def group_list(db, page_size: int, page_index: int, keyword: str): +async def group_list(db, page_size: int, page_index: int, keyword: str, role_key:str, user_id): logger.info("-------------------------group_list----------------------------------") query = db.query(GroupModel) + if role_key != "admin": + query.filter(GroupModel.creator==user_id) if keyword: query = query.filter(GroupModel.group_name.like('%{}%'.format(keyword))) items = query.order_by(GroupModel.id.desc()).limit(page_size).offset( @@ -30,9 +30,9 @@ return {"total": query.count(), "items": [item.to_json() for item in items]} -async def create_group(db, group_name: str, group_description: str): +async def create_group(db, group_name: str, group_description: str, user_id): try: - group_model = GroupModel(group_name=group_name, group_description=group_description) + group_model = GroupModel(group_name=group_name, group_description=group_description, creator=user_id) db.add(group_model) db.commit() db.refresh(group_model) diff --git a/app/service/knowledge.py b/app/service/knowledge.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app/service/knowledge.py diff --git a/app/service/organization.py b/app/service/organization.py index 67f59a9..13b9d08 100644 --- a/app/service/organization.py +++ b/app/service/organization.py @@ -1,7 +1,7 @@ import uuid -from app.Log import logger -from app.models import OrganizationModel, GroupModel +from Log import logger +from app.models import OrganizationModel from app.models.role_model import RoleModel diff --git a/app/service/resource.py b/app/service/resource.py index 572c55e..9d93cef 100644 --- a/app/service/resource.py +++ b/app/service/resource.py @@ -1,9 +1,7 @@ import uuid -from app.Log import logger -from app.models import OrganizationModel, GroupModel, ResourceModel -from app.models.role_model import RoleModel - +from Log import logger +from app.models import ResourceModel async def get_resource_tree(db): @@ -26,4 +24,42 @@ logger.error(e) db.rollback() return False + return True + + +async def create_menu(db, menu_name, component, path, order_num, perms, menu_type, description, parent_id, status, icon): + try: + dept_model = ResourceModel(id=str(uuid.uuid4()),name=menu_name, url=component,path=path,perms=perms,description=description,status=status, icon=icon,seq=order_num, resource_type_id=menu_type) + if parent_id: + dept_model.parent = db.get(ResourceModel, parent_id) + db.add(dept_model) + db.commit() + db.refresh(dept_model) + except Exception as e: + logger.error(e) + db.rollback() + return False + return True + + +async def edit_resource_data(db, menu_id, menu_name, component, path, order_num, perms, menu_type, description, parent_id, status, icon): + try: + dept_model = db.query(ResourceModel).filter(ResourceModel.id == menu_id).first() + dept_model.name = menu_name + dept_model.url = component + dept_model.path = path + dept_model.perms = perms + dept_model.status = status + dept_model.icon = icon + dept_model.seq = order_num + dept_model.description = description + dept_model.resource_type_id = menu_type + if parent_id: + dept_model.parent = db.get(ResourceModel, parent_id) + db.commit() + db.refresh(dept_model) + except Exception as e: + logger.error(e) + db.rollback() + return False return True \ No newline at end of file diff --git a/app/service/role.py b/app/service/role.py index 5568114..a0c631f 100644 --- a/app/service/role.py +++ b/app/service/role.py @@ -1,13 +1,15 @@ import uuid -from app.Log import logger -from app.models.resource_model import ResourceModel, ResourceTypeModel +from Log import logger +from app.models.resource_model import ResourceModel from app.models.role_model import RoleModel -async def role_list(db, page_size: int, page_index: int, keyword: str): +async def role_list(db, page_size: int, page_index: int, keyword: str, role_key:str, user_id): query = db.query(RoleModel) + if role_key != "admin": + query.filter(RoleModel.creator==user_id) if keyword: query = query.filter(RoleModel.name.like('%{}%'.format(keyword))) roles = query.order_by(RoleModel.id.desc()).limit(page_size).offset( @@ -15,9 +17,11 @@ return {"total": query.count(), "rows": [role.to_json() for role in roles]} -async def create_role(db, role_name: str, description: str, user_id): +async def create_role(db, role_name: str, description: str, role_key, data_scope, user_id): try: - role_model = RoleModel(id=str(uuid.uuid4()),name=role_name, description=description,creator=user_id) + role_model = RoleModel(id=str(uuid.uuid4()),name=role_name, description=description,creator=user_id, data_scope=data_scope) + if role_key: + role_model.roleKey = role_key db.add(role_model) db.commit() db.refresh(role_model) @@ -49,12 +53,18 @@ return True -async def edit_role_resource(db, role_id:str, role_name:str, description:str, resources:list): +async def edit_role_resource(db, role_id:str, role_name:str, description:str,role_key:str, data_scope:int, resources:list, edit_type:int): try: role = db.query(RoleModel).filter(RoleModel.id == role_id).first() - if role_name: role.name = role_name - if description: role.description = description - if resources: + if edit_type == 1: + role.name = role_name + role.description = description + + if role_key: + role.roleKey = role_key + if data_scope: + role.data_scope = data_scope + else: role.resources = [db.get(ResourceModel, resourcesId) for resourcesId in resources] db.add(role) db.commit() diff --git a/app/service/user.py b/app/service/user.py index 061d9b9..02a4efc 100644 --- a/app/service/user.py +++ b/app/service/user.py @@ -1,18 +1,18 @@ -import base64 - from datetime import datetime from app.api import pwd_context from app.config.config import settings from app.models import RoleModel, GroupModel from app.models.user_model import UserModel -from app.Log import logger +from Log import logger from app.service.bisheng import BishengService from app.service.ragflow import RagflowService -async def get_user_list(db, page_size: int, page_index: int, keyword: str): +async def get_user_list(db, page_size: int, page_index: int, keyword: str, role_key:str, user_id): query = db.query(UserModel) + if role_key != "admin": + query.filter(UserModel.creator==user_id) if keyword: query = query.filter(UserModel.group_name.like('%{}%'.format(keyword))) users = query.order_by(UserModel.id.desc()).limit(page_size).offset( @@ -42,7 +42,7 @@ return True -async def create_user(db, user_name, email, phone, login_name, password, roles, groups): +async def create_user(db, user_name, email, phone, login_name, password, roles, groups, user_id): try: bisheng_service = BishengService(settings.sgb_base_url) ragflow_service = RagflowService(settings.fwr_base_url) @@ -69,6 +69,7 @@ user_model.roles = [db.get(RoleModel, roleId) for roleId in roles] if groups: user_model.groups = [db.get(GroupModel, groupId) for groupId in groups] + user_model.creator = user_id db.add(user_model) db.commit() db.refresh(user_model) diff --git a/main.py b/main.py index b183845..90683f5 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,7 @@ from app.api.agent import router as agent_router from app.api.excel import router as excel_router from app.api.files import router as files_router +from app.api.knowledge import knowledge_router from app.api.organization import dept_router from app.api.report import router as report_router from app.api.resource import menu_router @@ -46,6 +47,7 @@ app.include_router(role_router, prefix='/api/role', tags=["role"]) app.include_router(dept_router, prefix='/api/dept', tags=["dept"]) app.include_router(menu_router, prefix='/api/menu', tags=["menu"]) +app.include_router(knowledge_router, prefix='/api/knowledge', tags=["knowledge"]) if __name__ == "__main__": import uvicorn -- Gitblit v1.8.0