LingAdmin/Backend/Services/AuthorizationService/README.md

157 lines
5.0 KiB
Markdown

# LingAdmin Authorization Service
授权微服务 - 负责角色管理、权限管理、用户角色分配等功能。
## 服务信息
| 属性 | 值 |
|------|-----|
| 端口 | 5002 |
| Dapr App ID | authorization-service |
| Dapr HTTP Port | 3502 |
| 数据库 | LingAdmin_Authorization |
## API 端点
### 服务间调用端点 (无需认证)
| 方法 | 路径 | 描述 |
|------|------|------|
| GET | `/api/authorization/users/{userId}/permissions` | 获取用户的角色和权限 |
| GET | `/api/authorization/users/{userId}/check?permission=xxx` | 检查用户是否有指定权限 |
### 受保护端点 (需要认证)
| 方法 | 路径 | 描述 | 权限要求 |
|------|------|------|----------|
| GET | `/api/authorization/me/permissions` | 获取当前用户权限 | 登录用户 |
| GET | `/api/authorization/permissions` | 获取所有权限列表 | Admin/SuperAdmin |
| GET | `/api/authorization/permissions/resource/{resource}` | 按资源获取权限 | Admin/SuperAdmin |
### 角色管理端点
| 方法 | 路径 | 描述 | 权限要求 |
|------|------|------|----------|
| GET | `/api/roles` | 获取所有角色 | Admin/SuperAdmin |
| GET | `/api/roles/{id}` | 获取角色详情 | Admin/SuperAdmin |
| POST | `/api/roles` | 创建角色 | Admin/SuperAdmin |
| PUT | `/api/roles/{id}` | 更新角色 | Admin/SuperAdmin |
| DELETE | `/api/roles/{id}` | 删除角色 | SuperAdmin |
| POST | `/api/roles/assign` | 分配角色给用户 | Admin/SuperAdmin |
| POST | `/api/roles/revoke` | 移除用户角色 | Admin/SuperAdmin |
| GET | `/api/roles/user/{userId}` | 获取用户的角色 | Admin/SuperAdmin |
## 启动方式
### 独立启动
```powershell
cd LingAdmin.AuthorizationService
dotnet run
```
### 使用 Dapr 启动
```powershell
dapr run --app-id authorization-service --app-port 5002 --dapr-http-port 3502 --resources-path ../dapr/components -- dotnet run
```
## 数据库迁移
```powershell
# 添加迁移
dotnet ef migrations add <MigrationName>
# 更新数据库
dotnet ef database update
```
## 预置数据
### 预置角色
| ID | 代码 | 名称 | 系统角色 | 描述 |
|----|------|------|----------|------|
| 1 | SuperAdmin | 超级管理员 | ✅ | 拥有所有权限 |
| 2 | Admin | 管理员 | ✅ | 系统管理员 |
| 3 | User | 普通用户 | ✅ | 普通用户 |
| 4 | Editor | 编辑 | ❌ | 内容编辑 |
| 5 | Auditor | 审核员 | ❌ | 审核员 |
### 预置权限
#### 用户管理权限
| 代码 | 名称 | 资源 | 操作 |
|------|------|------|------|
| users:read | 查看用户 | users | read |
| users:create | 创建用户 | users | create |
| users:update | 编辑用户 | users | update |
| users:delete | 删除用户 | users | delete |
#### 角色管理权限
| 代码 | 名称 | 资源 | 操作 |
|------|------|------|------|
| roles:read | 查看角色 | roles | read |
| roles:create | 创建角色 | roles | create |
| roles:update | 编辑角色 | roles | update |
| roles:delete | 删除角色 | roles | delete |
#### 权限管理
| 代码 | 名称 | 资源 | 操作 |
|------|------|------|------|
| permissions:read | 查看权限 | permissions | read |
| permissions:assign | 分配权限 | permissions | assign |
#### 业务权限
| 代码 | 名称 | 资源 | 操作 |
|------|------|------|------|
| requisitions:read | 查看请购单 | requisitions | read |
| requisitions:create | 创建请购单 | requisitions | create |
| requisitions:update | 编辑请购单 | requisitions | update |
| requisitions:delete | 删除请购单 | requisitions | delete |
| requisitions:approve | 审批请购单 | requisitions | approve |
| inventory:read | 查看库存 | inventory | read |
| inventory:manage | 管理库存 | inventory | manage |
| audit:read | 查看审计日志 | audit | read |
| settings:read | 查看设置 | settings | read |
| settings:update | 修改设置 | settings | update |
## 发布的事件
| 事件名称 | 描述 | 数据 |
|----------|------|------|
| role-created | 角色创建时发布 | RoleId, RoleCode, Timestamp |
| role-updated | 角色更新时发布 | RoleId, ChangedFields, Timestamp |
| role-deleted | 角色删除时发布 | RoleId, Timestamp |
| user-role-assigned | 用户角色分配时发布 | UserId, RoleIds, AssignedBy, Timestamp |
| role-permission-changed | 角色权限变更时发布 | RoleId, AddedPermissions, RemovedPermissions, Timestamp |
## 缓存策略
服务使用内存缓存来提高性能:
| 缓存键 | 过期时间 | 描述 |
|--------|----------|------|
| user_roles_{userId} | 15 分钟 | 用户角色列表 |
| user_perms_{userId} | 15 分钟 | 用户权限列表 |
| all_permissions | 1 小时 | 所有权限列表 |
角色权限变更时会自动失效相关缓存。
## 配置说明
### appsettings.json
```json
{
"ConnectionStrings": {
"DefaultConnection": "数据库连接字符串"
},
"JwtSettings": {
"SecretKey": "与 Identity Service 相同的密钥",
"Issuer": "与 Identity Service 相同",
"Audience": "与 Identity Service 相同"
}
}
```
> ⚠️ 注意: JWT 配置必须与 Identity Service 保持一致,否则无法验证 Token。