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