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

角色授权知识库

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