mirror of
https://github.com/langgenius/dify.git
synced 2026-09-29 17:07:38 +08:00
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import Session, scoped_session
|
|
|
|
from models.dataset import Dataset
|
|
from models.model import App
|
|
|
|
if TYPE_CHECKING:
|
|
from models.agent import Agent
|
|
|
|
|
|
class RBACResourceService:
|
|
@staticmethod
|
|
def get_app_agent_binding(session: Session | scoped_session, tenant_id: str, app_id: str) -> Agent | None:
|
|
app_model = session.scalar(select(App).where(App.id == app_id, App.tenant_id == tenant_id))
|
|
if app_model is None:
|
|
return None
|
|
return app_model.agent_app_binding_with_session(session=session, include_archived=True)
|
|
|
|
@staticmethod
|
|
def get_app_maintainer(session: Session | scoped_session, tenant_id: str, app_id: str) -> str | None:
|
|
return session.scalar(
|
|
select(App.maintainer).where(App.id == app_id, App.tenant_id == tenant_id, App.status == "normal")
|
|
)
|
|
|
|
@staticmethod
|
|
def get_dataset_maintainer(session: Session | scoped_session, tenant_id: str, dataset_id: str) -> str | None:
|
|
return session.scalar(
|
|
select(Dataset.maintainer).where(Dataset.id == dataset_id, Dataset.tenant_id == tenant_id)
|
|
)
|
|
|
|
@staticmethod
|
|
def get_dataset_id_by_pipeline(session: Session | scoped_session, tenant_id: str, pipeline_id: str) -> str | None:
|
|
dataset_id = session.scalar(
|
|
select(Dataset.id).where(Dataset.pipeline_id == pipeline_id, Dataset.tenant_id == tenant_id)
|
|
)
|
|
return None if dataset_id is None else str(dataset_id)
|