# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
VBase is a Go-based identity authentication and permission management framework built on the [Vigo ](https://github.com/veypi/vigo ) web framework (onion-model middleware architecture). It provides user management, scoped RBAC permissions, and OAuth2 authentication services.
- **Language**: Go 1.24+
- **Framework**: Vigo (onion-model middleware)
- **ORM**: GORM (MySQL, PostgreSQL, SQLite supported)
- **Authentication**: JWT + OAuth2
- **Permissions**: Scoped RBAC (Role-Based Access Control)
- **Frontend**: vhtml (embedded HTML-based UI at `/vb/` )
## Common Commands
```bash
# Run development server (default port 4001)
make run
# Database operations
go run ./cli/main.go db migrate
go run ./cli/main.go db drop
# Run integration tests
go test -v ./tests/...
```
## Architecture
### Onion Model Request Flow
```
Request -> [Global Before Middlewares] -> [Router] -> [Handler] -> [Service] -> [Model] -> Database
|
Response < - [ Global After Middleware ] < -------- +
```
### Directory Structure
```
├── api/ # REST API handlers and routing
│ ├── auth/ # Login, register, refresh token
│ ├── oauth/ # OAuth2 provider endpoints
│ ├── role/ # Role management
│ ├── user/ # User management
│ └── init.go # Router aggregation
├── auth/ # Core Scoped RBAC permission system
│ ├── auth.go # Permission checking implementation
│ └── design.md # Permission system design doc
├── cfg/ # Configuration (DB, Redis, JWT settings)
├── models/ # GORM data models
│ ├── auth.go # Role, Permission, UserRole models
│ ├── user.go # User, Identity, Session models
│ └── init.go # Model registration and migrations
├── libs/ # Utilities (cache, crypto, jwt, sms, email)
├── ui/ # Frontend admin interface (vhtml framework)
├── cli/ # Application entry point
└── tests/ # Go integration tests
```
### Permission System (Scoped RBAC)
The system uses a scoped permission model where permissions are isolated by `Scope` (e.g., "vb" for VBase, "app1" for external apps).
**Permission Format**: `resource:instance:sub-resource:sub-instance` (Tree structure)
**Levels**:
- Level 1: Create (Odd layers)
- Level 2: Read (Even layers)
- Level 4: Write (Even layers)
- Level 7: Admin (Even layers, inherited downwards)
**Key Interfaces**:
- `auth.Factory.New(scope)` : Get scoped auth instance.
- `auth.PermRead(code)` , `auth.PermWrite(code)` : Middleware checks.
- `auth.Grant(ctx, userID, permID, level)` : Grant permission.
### API Response Format
All responses are JSON formatted by `common.JsonResponse` middleware:
**Success:**
```json
{"code": 200, "data": { ... }}
```
**Error:**
```json
{ "code": 40001, "message": "Error description" }
```
### Frontend (vhtml)
The admin UI is in `ui/` using the vhtml framework:
- Access UI at `/vb/` path when server is running
- Routes defined in `ui/routes.js`