# Kylin Licensing

Kylin 许可证授权管理包 — 支持在线/离线验证、设备绑定、宽限期，严格遵守《著作权法》《计算机软件保护条例》。

## 功能特性

### 许可证管理
- **PASETO v4 令牌**：基于公钥签名的离线许可证验证
- **设备绑定**：限制许可证激活设备数量
- **宽限期**：许可证过期后仍可使用指定天数（`grace_period = 72h`）
- **过期强制**：超期后强制停用（`enforce_expiry`）
- **许可证类型**：试用版、标准版、专业版、企业版
- **功能权限控制**：`hasFeature()` 按许可证类型控制功能访问

### 集成方式
- **Artisan 命令**：生成、激活、查看许可证状态
- **HTTP 中间件**：`kylin.license` 自动验证许可证有效性
- **状态页面**：Web 端查看许可证信息
- **Facade**：`KylinLicensing` 门面便捷调用

## 安装

```bash
composer require kylin/licensing
```

## 配置发布

```bash
php artisan vendor:publish --tag=kylin-licensing-config
```

## 数据库迁移

```bash
php artisan migrate
```

## 使用示例

### Artisan 命令

```bash
# 生成许可证（开发/测试用）
php artisan kylin:license-generate --type=standard --days=365

# 激活许可证
php artisan kylin:license-activate <license-key>

# 查看许可证状态
php artisan kylin:license-status
```

### Facade

```php
use Kylin\Licensing\Facades\KylinLicensing;

// 验证许可证
$isValid = KylinLicensing::verify();

// 获取许可证信息
$info = KylinLicensing::getInfo();

// 检查功能权限
$hasFeature = KylinLicensing::hasFeature('advanced_export');

// 检查许可证类型
$isEnterprise = KylinLicensing::isType('enterprise');
```

### 中间件

```php
// 在路由中保护
Route::middleware('kylin.license')->group(function () {
    // 需要许可证验证的路由
    Route::get('/dashboard', [DashboardController::class, 'index']);
});
```

### 环境变量

```env
KYLIN_LICENSE_KEY=your-license-key-here
KYLIN_LICENSE_GRACE_PERIOD=72
KYLIN_LICENSE_ENFORCE_EXPIRY=true
```

## 许可证类型

| 类型 | 说明 | 功能权限 |
|------|------|------|
| `trial` | 试用版 | 基础功能，限时使用 |
| `standard` | 标准版 | 标准功能集 |
| `professional` | 专业版 | 高级功能（如高级导出、数据分析） |
| `enterprise` | 企业版 | 全功能 + 多设备支持 |

## 法律合规

本包严格遵守以下法律法规：

### 《著作权法》(2021.6.1)
- **第三条**：计算机软件作为作品受本法保护，软件版权声明（`copyright` 配置）
- **第十条**：著作权人享有许可他人使用作品的权利（`LicenseService` + `LicenseVerifier`）

### 《计算机软件保护条例》(2013.3.1 修订)
- **第八条**：软件著作权人享有许可他人行使软件著作权的权利
- **第十八条**：许可使用合同应明确许可的权利范围（`hasFeature` 功能权限控制）

### 《商标法》(2019.11.1 修订)
- **第五十七条**：未经商标注册人许可不得使用其注册商标，许可证过期后强制停止使用（`enforce_expiry`）

### 《个人信息保护法》(2021.11.1)
- **第六条**：最小必要原则，许可证验证仅收集必要设备信息

## 审计日志

许可证关键操作记录审计日志：

| 事件 | 说明 | 法律依据 |
|------|------|------|
| `license_activated` | 许可证激活 | 《计算机软件保护条例》第八条 |
| `license_deactivated` | 许可证停用 | 《商标法》第五十七条 |
| `license_activation_failed` | 激活失败 | 安全审计 |
| `license_expired` | 许可证过期 | 《商标法》第五十七条 |
| `license_grace_period` | 进入宽限期 | 合同约定 |

详见 [LEGAL.md](LEGAL.md)。

## 依赖

- PHP ^8.5
- Laravel ^13.0
- kylin/core

## 许可证

私有软件，未经授权禁止使用。
