Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/0.3.2 #714

Merged
merged 5 commits into from
Jun 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/backend/bisheng/api/services/assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,10 @@ def delete_gpts_tools(cls, user: UserPayload, tool_type_id: int) -> UnifiedRespo
return resp_200()
if exist_tool_type.is_preset:
return ToolTypeIsPresetError.return_resp()
# 判断是否有更新权限
if not user.access_check(exist_tool_type.user_id, exist_tool_type.id, AccessType.GPTS_TOOL_WRITE):
return UnAuthorizedError.return_resp()

GptsToolsDao.delete_tool_type(tool_type_id)
cls.delete_gpts_tool_hook(user, exist_tool_type)
return resp_200()
Expand Down
2 changes: 1 addition & 1 deletion src/backend/bisheng/api/services/evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ def add_evaluation_task(evaluation_id: int):
logger.info(f'evaluation task success id={evaluation_id}')

except Exception as e:
logger.error(f'evaluation task failed id={evaluation_id} {e}')
logger.exception(f'evaluation task failed id={evaluation_id} {str(e)}')
evaluation.status = EvaluationTaskStatus.failed.value
EvaluationDao.update_evaluation(evaluation=evaluation)
redis_client.delete(redis_key)
15 changes: 9 additions & 6 deletions src/backend/bisheng/api/services/role_group_service.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from datetime import datetime
from typing import List, Any
from typing import List, Any, Dict
from uuid import UUID

from fastapi.encoders import jsonable_encoder
Expand All @@ -17,7 +17,7 @@
from bisheng.database.models.group import Group, GroupCreate, GroupDao, GroupRead, DefaultGroup
from bisheng.database.models.group_resource import GroupResourceDao, ResourceTypeEnum
from bisheng.database.models.knowledge import KnowledgeDao
from bisheng.database.models.role import AdminRole
from bisheng.database.models.role import AdminRole, RoleDao
from bisheng.database.models.user import User, UserDao
from bisheng.database.models.user_role import UserRoleDao
from bisheng.database.models.user_group import UserGroupCreate, UserGroupDao, UserGroupRead
Expand Down Expand Up @@ -90,6 +90,8 @@ def update_group_hook(self, request: Request, login_user: UserPayload, group: Gr

def delete_group(self, request: Request, login_user: UserPayload, group_id: int):
"""删除用户组"""
if group_id == DefaultGroup:
raise HTTPException(status_code=500, detail='默认组不能删除')
group_info = GroupDao.get_user_group(group_id)
if not group_info:
return resp_200()
Expand Down Expand Up @@ -121,7 +123,8 @@ def delete_group_hook(self, request: Request, login_user: UserPayload, group_inf
if need_move_resource:
GroupResourceDao.update_group_resource(need_move_resource)
GroupResourceDao.delete_group_resource_by_group_id(group_info.id)

# 删除用户组下的角色列表
RoleDao.delete_role_by_group_id(group_info.id)

def get_group_user_list(self, group_id: int, page_size: int, page_num: int) -> List[User]:
"""获取全量的group列表"""
Expand Down Expand Up @@ -178,16 +181,16 @@ def replace_user_groups(self, request: Request, login_user: UserPayload, user_id

# 记录审计日志
group_infos = GroupDao.get_group_by_ids(old_group + group_ids)
group_dict = {}
group_dict: Dict[int, str] = {}
for one in group_infos:
group_dict[one.id] = one.group_name
note = "编辑前用户组:"
for one in old_group:
note += group_dict.get(one, one) + "、"
note += f'{group_dict.get(one, one)}、'
note = note.rstrip('、')
note += "编辑后用户组:"
for one in group_ids:
note += group_dict.get(one, one) + "、"
note += f'{group_dict.get(one, one)}、'
note = note.rstrip('、')
AuditLogService.update_user(login_user, get_request_ip(request), user_id, group_dict.keys(), note)
return None
Expand Down
1 change: 1 addition & 0 deletions src/backend/bisheng/api/v1/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@ async def create_role(*,
create_role_hook(request, login_user, db_role)
return resp_200(db_role)
except Exception:
logger.exception('add role error')
raise HTTPException(status_code=500, detail='添加失败,检查是否重复添加')


Expand Down
21 changes: 19 additions & 2 deletions src/backend/bisheng/database/models/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from bisheng.database.base import session_getter
from bisheng.database.models.base import SQLModelSerializable
from sqlalchemy import Column, DateTime, text, func
from sqlalchemy import Column, DateTime, text, func, delete, and_, UniqueConstraint
from sqlmodel import Field, select

# 默认普通用户角色的ID
Expand All @@ -13,7 +13,7 @@


class RoleBase(SQLModelSerializable):
role_name: str = Field(index=False, description='前端展示名称', unique=True)
role_name: str = Field(index=False, description='前端展示名称')
group_id: Optional[int] = Field(index=True)
remark: Optional[str] = Field(index=False)
create_time: Optional[datetime] = Field(sa_column=Column(
Expand All @@ -26,6 +26,7 @@ class RoleBase(SQLModelSerializable):


class Role(RoleBase, table=True):
__table_args__ = (UniqueConstraint('group_id', 'role_name', name='group_role_name_uniq'),)
id: Optional[int] = Field(default=None, primary_key=True)


Expand Down Expand Up @@ -94,3 +95,19 @@ def get_role_by_ids(cls, role_ids: List[int]) -> List[Role]:
def get_role_by_id(cls, role_id: int) -> Role:
with session_getter() as session:
return session.query(Role).filter(Role.id == role_id).first()

@classmethod
def delete_role_by_group_id(cls, group_id: int):
"""
删除分组下所有的角色,清理用户对应的角色
"""
from bisheng.database.models.user_role import UserRole
with session_getter() as session:
# 清理对应的用户
all_user = select(UserRole, Role).join(
Role, and_(UserRole.role_id == Role.id,
Role.group_id == group_id)).group_by(UserRole.id)
all_user = session.exec(all_user).all()
session.exec(delete(UserRole).where(UserRole.id.in_([one.id for one in all_user])))
session.exec(delete(Role).where(Role.group_id == group_id))
session.commit()
4 changes: 2 additions & 2 deletions src/frontend/src/components/bs-comp/sheets/TaggingSheet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function TaggingSheet({children}) {

const handleDragEnd = (result) => {
if(!result.destination) return
const newButtons = init
const newButtons = buttons
const [moveItem] = newButtons.splice(result.source.index, 1)
newButtons.splice(result.destination.index, 0, moveItem)
setButtons(newButtons)
Expand Down Expand Up @@ -46,7 +46,7 @@ export default function TaggingSheet({children}) {
)}
</Draggable>
))}
{provided.placeholder}
{/* {provided.placeholder} */}
</div>
)}
</Droppable>
Expand Down