Commit a4792627 authored by 林洋洋's avatar 林洋洋

角色授权知识库

parent 4a7eb1f7
......@@ -484,6 +484,10 @@ class RoleDal(DalBase):
depts = await DeptDal(db=self.db).get_datas(limit=0, id=("in", data.dept_ids), v_return_objs=True)
for dept in depts:
obj.depts.add(dept)
if data.knowledges:
depts = await DeptDal(db=self.db).get_datas(limit=0, id=("in", data.dept_ids), v_return_objs=True)
for dept in depts:
obj.depts.add(dept)
await self.flush(obj)
return await self.out_dict(obj, v_options, v_return_obj, v_schema)
......@@ -523,6 +527,14 @@ class RoleDal(DalBase):
for dept in depts:
obj.depts.add(dept)
continue
elif key == "knowledge_ids":
if value:
knowledges = await KnowledgeDal(db=self.db).get_datas(limit=0, id=("in", value), v_return_objs=True)
if obj.knowledges:
obj.knowledges.clear()
for knowledge in knowledges:
obj.knowledges.add(knowledge)
continue
setattr(obj, key, value)
await self.flush(obj)
return await self.out_dict(obj, None, v_return_obj, v_schema)
......@@ -531,6 +543,10 @@ class RoleDal(DalBase):
role = await self.get_data(role_id, v_options=[joinedload(self.model.menus)])
return [i.id for i in role.menus]
async def get_role_knowledge_list(self, role_id: int) -> list:
role = await self.get_data(role_id, v_options=[joinedload(self.model.knowledges)])
return [i.id for i in role.knowledges]
async def get_select_datas(self) -> list:
"""
获取选择数据,全部数据
......
......@@ -11,7 +11,8 @@ from dbgpt.app.apps.db.db_base import BaseModel
from sqlalchemy import String, Boolean, Integer
from .menu import VadminMenu
from .dept import VadminDept
from .m2m import vadmin_auth_role_menus, vadmin_auth_role_depts
from .m2m import vadmin_auth_role_menus, vadmin_auth_role_depts,vadmin_auth_role_knowledge
from ...media.models import VadminCorrelation
class VadminRole(BaseModel):
......@@ -28,3 +29,5 @@ class VadminRole(BaseModel):
menus: Mapped[set[VadminMenu]] = relationship(secondary=vadmin_auth_role_menus)
depts: Mapped[set[VadminDept]] = relationship(secondary=vadmin_auth_role_depts)
knowledges: Mapped[set[VadminCorrelation]] = relationship(secondary=vadmin_auth_role_knowledge)
from .user import UserOut, UserUpdate, User, UserIn, UserSimpleOut, ResetPwd, UserUpdateBaseInfo, UserPasswordOut, UpdatePwd
from .role import Role, RoleOut, RoleIn, RoleOptionsOut, RoleSimpleOut
from .role import Role, RoleOut, RoleIn, RoleOptionsOut, RoleSimpleOut, RoleKnowledgeOut
from .menu import Menu, MenuSimpleOut, RouterOut, Meta, MenuTreeListOut
from .dept import Dept, DeptSimpleOut, DeptTreeListOut
from .knowledge import Knowledge, KnowledgeOut
\ No newline at end of file
......@@ -11,6 +11,7 @@ from pydantic import BaseModel, ConfigDict, Field
from dbgpt.app.apps.core.data_types import DatetimeStr
from .menu import MenuSimpleOut
from .dept import DeptSimpleOut
from .knowledge import KnowledgeOut
class Role(BaseModel):
......@@ -36,11 +37,18 @@ class RoleOut(RoleSimpleOut):
menus: list[MenuSimpleOut] = []
depts: list[DeptSimpleOut] = []
knowledges: list[KnowledgeOut] = []
class RoleKnowledgeOut(RoleSimpleOut):
model_config = ConfigDict(from_attributes=True)
knowledges: list[KnowledgeOut] = []
class RoleIn(Role):
menu_ids: list[int] = []
dept_ids: list[int] = []
knowledge_ids: list[int] = []
class RoleOptionsOut(BaseModel):
......@@ -49,4 +57,3 @@ class RoleOptionsOut(BaseModel):
label: str = Field(alias='name')
value: int = Field(alias='id')
disabled: bool
......@@ -179,10 +179,14 @@ async def get_roles(
params: RoleParams = Depends(),
auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.list"]))
):
datas, count = await crud.RoleDal(auth.db).get_datas(**params.dict(), v_return_count=True)
return SuccessResponse(datas, count=count)
model = models.VadminRole
options = [joinedload(model.knowledges)]
schema = schemas.RoleKnowledgeOut
datas, count = await crud.RoleDal(auth.db).get_datas(**params.dict(), v_schema=schema, v_return_count=True, v_options=options)
return SuccessResponse(datas, count=count)
# FullAdminAuth(permissions=["auth.role.list"])
@router.post("/roles", summary="创建角色信息")
async def create_role(role: schemas.RoleIn, auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.create"]))):
return SuccessResponse(await crud.RoleDal(auth.db).create_data(data=role))
......@@ -218,7 +222,7 @@ async def get_role(
auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.view", "auth.role.update"]))
):
model = models.VadminRole
options = [joinedload(model.menus), joinedload(model.depts)]
options = [joinedload(model.menus), joinedload(model.depts), joinedload(model.knowledges)]
schema = schemas.RoleOut
return SuccessResponse(await crud.RoleDal(auth.db).get_data(data_id, v_options=options, v_schema=schema))
......@@ -328,10 +332,10 @@ async def put_dept(
return SuccessResponse(await crud.DeptDal(auth.db).put_data(data_id, data))
@router.get("/knowledges", summary="获取全部知识库")
async def get_knowledges(auth: Auth = Depends(OpenAuth())):
@router.get("/knowledges", summary="获取角色知识库权限")
async def get_knowledges(role_id: int, auth: Auth = Depends(FullAdminAuth())):
schema = schemas.KnowledgeOut
knowledge_list = await crud.KnowledgeDal(auth.db).get_datas(v_schema=schema)
role_knowledge_list = await crud.KnowledgeDal(auth.db).get_datas(v_schema=schema)
role_knowledge_list = await crud.RoleDal(auth.db).get_role_knowledge_list(role_id)
return SuccessResponse({"role_knowledge_list": role_knowledge_list, "knowledge_list": knowledge_list})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment