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