Skip to content

[BE][Infra][FIX] MVP1 RBAC/Organization Foundation 정렬 #56

Description

@yoonki1207

목표

  • dev의 조직/팀 ERD를 보존하면서 MVP1 permission foundation을 구현한다.
  • viewer/operator/builder/manager 기반 auth_state 표준을 코드에 반영한다.
  • user_workflow_permissions, user_llm_permissions를 additive allow로 추가한다.

관련 Linear

구현 범위

작업 내용
Permission constants none/viewer/operator/builder/manager/auditor/raw_auditor와 permission vocabulary를 shared layer에 정의한다.
Effective permission helper organization owner/manager 자동 manager, team permission, user direct permission을 합산해 가장 강한 권한을 반환한다.
User direct tables user_workflow_permissions, user_llm_permissions 모델과 migration을 추가한다.
Additive allow user direct permission은 team permission을 낮추거나 deny하지 않는다.
Gateway dependency require_workflow_permission, require_llm_credential_permission 같은 API dependency 또는 service helper를 만든다.
Organization bootstrap 신규 가입 user가 사용할 기본 organization/team/membership 기반을 만든다.
Team management API team 생성/수정/비활성화, membership 추가/제거, resource permission grant/revoke API를 만든다.
Audit permission grant/revoke/denied를 audit_logs에 기록한다.
Trace RBAC 정렬 apps/shared/services/tracing/rbac.pyread/write/execute/admin 체계를 MVP 표준 상태로 맞춘다.
기존 데이터 호환 기존 DB row에 read/write/execute/admin이 있으면 의미가 유지되도록 migration 또는 compatibility mapping을 둔다.

구현 방법

  1. apps/shared/db/models/team.py에 기존 team permission table을 건드리지 않고 user direct permission model만 추가한다.
  2. Alembic migration으로 user_workflow_permissions, user_llm_permissions를 생성한다.
  3. 각 user direct table은 아래 공통 column을 가진다.
id
grantee_organization_id
user_id
workflow_id 또는 llm_credential_id
auth_state
assigned_by
assigned_at
options
flags
  1. unique constraint는 organization, user, resource 조합 중복을 막는다.
  2. permission helper는 다음 순서를 따른다.
1. user 인증
2. active organization 결정
3. resource organization scope 확인
4. organization.created_by 또는 organization.managed_by이면 manager
5. active organization의 team membership 조회
6. team permission 조회
7. user direct permission 조회
8. team/user direct 중 가장 강한 auth_state 선택
9. permission action 허용 여부 반환
10. 거부 또는 grant/revoke는 audit_logs 기록
  1. auth_state 강도는 다음으로 고정한다.
none < viewer < operator < builder < manager
auditor < raw_auditor < manager
  1. admin은 permission으로 쓰지 않는다. 기존 admin 문자열이 남아 있으면 manager 의미로만 호환한다.
  2. roles, user_roles, resource_permissions는 만들지 않는다.

Acceptance Criteria:

  • 조직 owner/manager는 해당 organization scope 안에서 manager로 판정된다.
  • 권한 row가 없으면 fail-closed로 거부된다.
  • viewer는 workflow read만 가능하다.
  • operator는 workflow execute 가능, write 불가다.
  • builder는 workflow write/execute 가능, deploy/manage 불가다.
  • manager는 workflow deploy/manage까지 가능하다.
  • team viewer + user direct builder이면 effective permission은 builder다.
  • team manager + user direct viewer이면 effective permission은 manager다.
  • LLM credential operator 또는 builderuse 가능하다.
  • LLM credential vieweruse 불가다.
  • permission grant/revoke/denied가 audit_logs에 남는다.
  • tracing RBAC 테스트가 MVP 표준 auth_state를 기준으로 통과한다.

Out of Scope

  • user_knowledge_permissions
  • user_audit_permissions
  • node-level permission
  • connection 전용 permission table
  • external IdP/OIDC

참고 사항

MVP-01-기반 문서

Metadata

Metadata

Assignees

Type

No type

Fields

Priority

None yet

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions