# Bastion SSO API

统一 SSO 登录系统后端（Laravel 11），用于团队内部集中管理堡垒机访问授权、服务器资源与访问审计。

## 主要模块

- 登录模块：基于 `tymon/jwt-auth` 生成 JWT。
- 用户及权限模块：基于 `spatie/laravel-permission` 实现角色与权限管理。
- 服务器资源模块：维护服务器 `asset_id/account_id/protocols` 等信息。
- 日志模块：记录用户访问服务器资源行为。
- 堡垒机授权账号模块：维护授权账号并定时刷新 `USM-AUTHENTICATION` 与 `USM`。

## 安装与启动

```bash
composer install
cp .env.example .env
php artisan key:generate
php artisan jwt:secret --force
```

按需将 `.env` 的数据库配置改为 MySQL：

```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=bastion_sso
DB_USERNAME=root
DB_PASSWORD=secret
```

然后执行：

```bash
php artisan migrate
php artisan serve
```

## RBAC 初始化（推荐）

首次部署建议初始化权限点和默认角色：

```bash
php artisan user:manage init-rbac
```

将某个用户设为管理员（拥有全部权限）：

```bash
php artisan user:manage set-admin --email=admin@example.com
```

取消管理员：

```bash
php artisan user:manage unset-admin --email=admin@example.com
```

## 接口说明

- 认证：
  - `POST /auth/login`
  - `POST /auth/logout`
  - `GET /auth/me`
- 用户：`/users`（GET/POST/GET{id}/PUT/DELETE）
- 用户权限同步：`PUT /users/{id}/permissions`
- 角色：`/roles`（GET/POST/GET{id}/PUT/DELETE）
- 角色权限同步：`PUT /roles/{id}/permissions`
- 权限：`/permissions`（GET/POST/GET{id}/PUT/DELETE）
- 服务器：`/servers`（GET/POST/GET{id}/PUT/DELETE）
- 日志：`/logs`（GET/POST）
- 授权账号：`/accounts`（GET/POST/GET{id}/PUT/DELETE）

控制器使用 `hg/apidoc` 注解声明，并启用了注解自动注册路由。

## 权限控制说明

- 所有管理接口均通过中间件 `auth:api` + `permission:*` 控制。
- 管理员角色：`admin`（guard: `api`）默认拥有所有平台权限。
- 平台权限粒度示例：
  - `platform.users.view/manage`
  - `platform.roles.view/manage`
  - `platform.permissions.view/manage`
  - `platform.servers.view/manage`
  - `platform.accounts.view/manage`
  - `platform.logs.view/manage`
  - `resource.servers.use`

## 统一错误响应

- 未认证返回 `401`：

```json
{"code":401,"message":"未认证或登录已过期","data":null}
```

- 无权限返回 `403`：

```json
{"code":403,"message":"无权限执行此操作","data":null}
```

## 命令

- 刷新堡垒机 token：`php artisan bastion:refresh-tokens`
- 用户与权限管理：

```bash
php artisan user:manage {create|reset-password|list|init-rbac|create-role|assign-role|remove-role|assign-permission|remove-permission|grant-server|set-admin|unset-admin}
```

常见示例：

```bash
php artisan user:manage create --email=user@example.com --nickname=user --password=secret123
php artisan user:manage assign-role --email=user@example.com --role=operator
php artisan user:manage assign-permission --email=user@example.com --permission=platform.logs.view
php artisan user:manage grant-server --email=user@example.com --server-id=1 --ssh=1 --sftp=1 --rdp=0
```

## 定时任务

调度任务在 `routes/console.php` 中配置，每 10 分钟刷新一次堡垒机 token。
