Files
dify/api/services/rbac_resource_service.py
T

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)