仪表盘
{{ stats.users }}
用户总数
{{ stats.roles }}
角色数
{{ stats.permissions }}
权限数
{{ stats.groups }}
权限组
用户管理
共 {{ userTotal }} 人
| 用户名 | 姓名 | 角色 | 操作 | ||
|---|---|---|---|---|---|
| {{ u.username }} | {{ u.real_name || '-' }} |
{{ roleName }}
未分配
|
|||
| 暂无用户 | |||||
第 {{ userPage }}/{{ Math.ceil(userTotal/userPageSize) }} 页
角色管理
{{ r.name }}
{{ r.description || '-' }}
{{ r.user_count || 0 }} 用户|{{ r.permission_ids?.length || 0 }} 权限
暂无角色
权限组管理
{{ g.name }}
{{ g.description || '-' }}
{{ g.permission_count }} 个权限
暂无权限组
权限管理
{{ g.group }} ({{ countGroupPerms(g) }} 项)
{{ parentNode.name }}
{{ parentNode.code }}
{{ parentNode.description }}
{{ child.name }}
{{ child.code }}
{{ child.description }}
外部权限供外部系统通过 API 密钥查询,不对应系统实际功能接口
| 编码 | 名称 | 分组 | 操作 | |
|---|---|---|---|---|
| {{ p.code }} | {{ p.name }} | {{ p.group || '-' }} | ||
| 暂无外部权限 | ||||
| 编码 | 名称 | 分组 | 操作 | |
|---|---|---|---|---|
| {{ p.code }} | {{ p.name }} | {{ p.group || '-' }} | ||
| 暂无内部权限 | ||||
API 密钥
API 密钥用于其他系统在不登录的情况下查询您的权限信息。请在请求头中携带 X-API-Key 访问 /api/public/permissions 或 /api/public/check?permission=xxx
密钥测试
{{ testResult.success ? '测试成功' : '测试失败' }}
{{ JSON.stringify(testResult.data, null, 2) }}
{{ testResult.error }}
新密钥已生成,请立即复制保存:
{{ newApiKey }}
| 名称 | 密钥(部分) | 操作 | ||
|---|---|---|---|---|
| {{ k.name || '默认' }} | {{ k.key.substring(0, 8) }}... | |||
| 暂无密钥 | ||||
调用日志
| 密钥归属 | 接口 | IP | 状态 | 时间 | ||
|---|---|---|---|---|---|---|
|
{{ log.owner_name || log.owner_username || '-' }}
{{ log.key_name || '默认' }}
|
{{ log.endpoint.replace('/api/public/', '') }} | {{ log.ip_address }} | 成功 失败 | {{ formatDate(log.called_at) }} | ||
| 暂无日志 | ||||||
共 {{ logTotal }} 条
{{ logPage }} / {{ Math.max(1, Math.ceil(logTotal/20)) }}
调用统计
按密钥维度展示调用次数和风险概览,帮助识别异常调用
| 密钥归属 | 密钥名称 | 总调用 | 成功 | 失败 | IP数 | 风险 | 操作 |
|---|---|---|---|---|---|---|---|
|
{{ s.owner_name || s.owner_username || '-' }}
{{ s.owner_username }}
|
{{ s.key_name || '默认' }} | {{ s.total_calls }} | {{ s.success_calls }} | {{ s.failed_calls }} | {{ s.unique_ips }} | 高风险 中风险 低风险 | |
| 暂无统计数据 | |||||||
IP 调用详情 - {{ selectedKeyStats.key_name || '默认' }} ({{ selectedKeyStats.owner_name || selectedKeyStats.owner_username }})
| IP 地址 | 调用次数 | 成功 | 失败 | 最近调用 |
|---|---|---|---|---|
| {{ ip.ip_address }} | {{ ip.call_count }} | {{ ip.success_count }} | {{ ip.failed_count }} | {{ formatDate(ip.last_called_at) }} |
| 暂无数据 | ||||
OAuth 应用
注册第三方应用,让它们通过 OAuth2 接入本系统的统一登录和权限管理。接入文档见:GET /api/oauth/docs/integration
| 应用名称 | Client ID | 操作 | ||||
|---|---|---|---|---|---|---|
|
{{ c.app_name }}
{{ c.app_description }}
|
{{ c.client_id }} | |||||
| 暂无注册应用 | ||||||
OAuth2 测试工具
测试 OAuth2 授权码流程。填入应用信息后,按步骤完成授权、换取 Token、获取用户信息。
测试配置
步骤 1: 生成授权 URL
步骤 2: 处理回调
授权码: {{ oauthTestAuthCode }}
State: {{ oauthTestCallbackState }}
State 验证: {{ oauthTestStateValid ? '✓ 匹配' : '✗ 不匹配' }}
步骤 3: 获取 Token
Access Token
{{ oauthTestAccessToken }}
Refresh Token
{{ oauthTestRefreshToken }}
Token 类型: {{ oauthTestTokenType }}
过期时间: {{ oauthTestExpiresIn }} 秒
步骤 4: 获取用户信息
{{ oauthTestUserInfo }}
测试日志
[{{ log.time }}] {{ log.message }}
等待操作...
钉钉同步
钉钉应用配置
{{ dingtalkTestResult.message }}
用户同步
从钉钉拉取组织架构中的所有用户,同步到本系统。已存在的用户会更新信息,新用户会自动创建(默认密码 123456)。
上次同步: {{ formatDate(dingtalkConfig.last_sync_at) }}
{{ dingtalkSyncResult.message }}
(共 {{ dingtalkSyncResult.total }} 人)