사용자 도메인(유저/그룹/권한/회사)을 위한 핵심 모델, 서비스, 리포지토리, 웹 DTO/컨트롤러를 제공하는 모듈이다. JPA/JDBC 구현을 모두 포함하며, 스타터 모듈에서 자동 구성된다.
studio-platform-starter-user 를 의존성에 추가하면 쉽게 사용할 수 있다. JPA 을 사용하는 경우 의존성을 spring-boot-starter-data-jpa 로 변경한다. spring-boot-starter-security 의존성을 사용자 모듈에서 비밀번호 암호화를 위한 추상을 사용하기 때문에 포함되었다.
dependencies {
implementation("studio.one.starter:studio-platform-starter")
**implementation("studio.one.starter:studio-platform-starter-user")**
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-aop")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
implementation("org.springframework.boot:spring-boot-starter-security")
}
전역 설정 또는 사용자 기능 전용 설정을 사용한다.
studio:
persistence:
type: jdbc # jpa | jdbc
features:
user:
**enabled: true**
persistence: jdbc # (선택) user 기능만 별도 지정
엔드포인트는 studio.features.user.web.enabled = true 일떄 활성화되며, 개별로 endpoint 사용 여부를 제어할 수 도 있다.
studio:
persistence:
type: jdbc # jpa | jdbc
features:
user:
**enabled: true**
web:
**enabled: true**
엔트포인트는 user, group, role, self 가 있으며 디폴트 경로는 아래와 같다.
/api/mgmt/users/api/mgmt/groups/api/mgmt/roles/api/self또는 아래와 같이 설정을 통하여 지정할 수 있다.
studio:
features:
user:
web:
enabled: true
**base-path: /api/mgmt**
self:
enabled: true
**path: /api/self**
endpoints:
user:
enabled: false
group:
enabled: true
role:
enabled: true
erDiagram
%% [1] User & Property
TB_APPLICATION_USER ||--o{ TB_APPLICATION_USER_PROPERTY : "has"
TB_APPLICATION_USER {
bigserial user_id PK
varchar username UK
varchar password_hash
varchar email UK
boolean user_enabled
int failed_attempts
timestamptz account_locked_until
timestamptz creation_date
}
TB_APPLICATION_USER_PROPERTY {
bigint user_id PK, FK
varchar property_name PK
varchar property_value
}
%% [2] Role & RBAC (N:M)
TB_APPLICATION_USER ||--o{ TB_APPLICATION_USER_ROLES : "assigned"
TB_APPLICATION_ROLE ||--o{ TB_APPLICATION_USER_ROLES : "grants"
TB_APPLICATION_ROLE {
bigserial role_id PK
varchar name UK
varchar description
}
TB_APPLICATION_USER_ROLES {
bigint user_id PK, FK
bigint role_id PK, FK
timestamptz assigned_at
}
%% [3] Group & Membership
TB_APPLICATION_GROUP ||--o{ TB_APPLICATION_GROUP_MEMBERS : "contains"
TB_APPLICATION_USER ||--o{ TB_APPLICATION_GROUP_MEMBERS : "is member of"
TB_APPLICATION_GROUP {
bigserial group_id PK
varchar name UK
varchar description
}
TB_APPLICATION_GROUP_MEMBERS {
bigint group_id PK, FK
bigint user_id PK, FK
timestamptz joined_at
}
%% [4] Group Roles
TB_APPLICATION_GROUP ||--o{ TB_APPLICATION_GROUP_ROLES : "assigned"
TB_APPLICATION_ROLE ||--o{ TB_APPLICATION_GROUP_ROLES : "grants to group"
TB_APPLICATION_GROUP_ROLES {
bigint group_id PK, FK
bigint role_id PK, FK
timestamptz assigned_at
}
%% [5] Group & Property
TB_APPLICATION_GROUP ||--o{ TB_APPLICATION_GROUP_PROPERTY : "has"
TB_APPLICATION_GROUP_PROPERTY {
bigint group_id PK, FK
varchar property_name PK
varchar property_value
}
%% [6] Company & Property
TB_APPLICATION_COMPANY ||--o{ TB_APPLICATION_COMPANY_PROPERTY : "has"
TB_APPLICATION_COMPANY {
bigserial company_id PK
varchar name UK
varchar display_name
varchar domain_name
}
TB_APPLICATION_COMPANY_PROPERTY {
bigint company_id PK, FK
varchar property_name PK
varchar property_value
}
%% [7] Token (Session)
TB_APPLICATION_USER ||--o| TB_APPLICATION_LOGIN_TOKEN : "authenticated by"
TB_APPLICATION_LOGIN_TOKEN {
varchar uuid PK
varchar username FK
varchar token
timestamptz last_use_date
}