|
25818
|
feat(console): 接入权限说明与操作记录的操作对象快照
|
125
|
16
|
verify.yml
|
7
|
16
|
0
|
refs/heads/feat/console-layout
|
ff5ee33515b0a21b6ba738d00c52373fabfaa50d
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/feat/console-layout {"ref":"refs/heads/feat/console-layout","before":"0000000000000000000000000000000000000000","after":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","compare_url":"https://gitea.g-hi.com/pengzhiyu/IAM/compare/3cf111b21a47760e5c71fc6b2fba96d882dbd3f1...ff5ee33515b0a21b6ba738d00c52373fabfaa50d","commits":[{"id":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/ff5ee33515b0a21b6ba738d00c52373fabfaa50d","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:48:33-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/lib/t03-api.ts","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/AuditPage.tsx","iam-admin-web/src/pages/management/AuthorizationShared.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/styles/applications.css","iam-admin-web/src/styles/audit.css","iam-admin-web/src/styles/authorization.css","iam-admin-web/src/test/application-management.test.tsx","iam-admin-web/src/test/audit.test.tsx","iam-admin-web/src/test/authorization-management.test.tsx"]},{"id":"9631e78cfeee4abd1ccb7e7f777864e4815ded49","message":"chore: 合并 main 引入权限说明与操作对象快照后端\n\n前端接入权限说明与操作记录操作对象前,先把 main 上的后端交付(a435000、536e36c、85e2c17)合入前端分支。\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/9631e78cfeee4abd1ccb7e7f777864e4815ded49","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:33:36-07:00","added":["docs/console/permission-description-audit-target-handoff.md","iam-server/src/main/java/com/iam/server/accounts/AuditTargetSnapshot.java","iam-server/src/main/resources/db/migration/V29__permission_description.sql","iam-server/src/test/java/com/iam/server/protocol/ObservedProtocolFixture.java","iam-server/src/test/java/com/iam/server/protocol/PermissionDescriptionIT.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolPortAllocationIT.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolTestPort.java","iam-server/src/test/java/com/iam/server/security/AuthDiagnosticsTestProbe.java","iam-server/src/test/java/com/iam/server/security/AuthDiagnosticsTestProbeTest.java"],"removed":[],"modified":["docs/audit-security.md","docs/authorization.md","docs/data-foundation.md","docs/schemas/permission-catalog.schema.json","docs/tasks/P12-auth-ingress-attribution-design.md","docs/tasks/P12-software-optimization.md","iam-server/src/main/java/com/iam/server/accounts/AccountStore.java","iam-server/src/main/java/com/iam/server/accounts/AuditReadService.java","iam-server/src/main/java/com/iam/server/accounts/AuthorizationService.java","iam-server/src/main/java/com/iam/server/protocol/RefreshExpiryGuard.java","iam-server/src/main/java/com/iam/server/protocol/RefreshGovernance.java","iam-server/src/main/java/com/iam/server/security/AuthRequestDiagnostics.java","iam-server/src/test/java/com/iam/server/data/AuthorizationMigrationIT.java","iam-server/src/test/java/com/iam/server/data/MigrationIT.java","iam-server/src/test/java/com/iam/server/protocol/AuditReadIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthIngressConservativeIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthIngressLifecycleIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthIngressTimeContractIT.java","iam-server/src/test/java/com/iam/server/protocol/CapacityDiagnosticsTest.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolFixture.java","iam-server/src/test/java/com/iam/server/protocol/RefreshExpiryGuardTest.java","iam-server/src/test/java/com/iam/server/protocol/RefreshExpiryLifecycleIT.java","iam-server/src/test/java/com/iam/server/security/AuthRequestDiagnosticsTest.java","scripts/capacity/auth_diagnostics.py","scripts/capacity/test_auth_diagnostics.py"]},{"id":"3973681b67a737220c25c4bc3f916ca2b687b5ee","message":"feat(console): 重排个人中心并把登录记录改为当前登录加表格\n\n个人中心原先把邮箱、多因素验证放在最前,账号信息压在下方;登录记录每条都是一张大卡片,十几条记录要滚很久,已过期的登录也和当前登录一样醒目。本次按控制台其他页面的布局约定重排个人中心。\n\n实现内容:\n- 上排并列「我的账号」(名字首字头像 + 平台管理身份徽标)与「我的企业」(企业 / 你的身份 / 成员代码三列表格,手机上收窄内边距不必横向滚动)\n- 邮箱与多因素验证合并为「账号安全」卡片,左侧标题与说明、右侧内容,900px 以下上下排列;多因素验证面板与登录页共用,本次未改\n- 邮箱区域改用与多因素验证相同外观的状态摘要(未登记 / 未验证 / 已验证 + 投递状态);登记或发送验证邮件的表单点按钮后就地展开,展开后聚焦第一个字段,提交后无论成败都清除密码;「取消待处理的验证与恢复链接」改名为「作废已发出的邮件链接」并保持常驻(找回密码链接不体现在邮箱状态里)\n- 登录记录拆为「当前这次登录」单独一块(四个时间 + 期限规则)与「其他登录」表格(登录时间 + 编号缩写 / 状态 / 最近使用 / 自动退出于);表格时间用今天、昨天等简短写法,完整时间在悬停提示中\n- 已退出的登录不再显示退出按钮;已过期、已失效的登录仍可退出以撤销业务系统中残留的授权,按钮改为轻量样式,整行弱化\n- 退出确认弹窗底部改为「取消 + 确认退出」,补充最近使用时间,登录编号带名称与注解;账号标识同样带名称与注解\n- 单测改用新的邮箱按钮与字段名,新增「当前登录单独列出、已退出的登录不提供退出按钮」用例;acceptance-p11-t02 同步新的邮箱登记流程与已验证文案,acceptance-t05 依赖的类名与按钮名保持不变\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、224 项全部通过\n- 浏览器检查 1280 宽、375 窄屏与亮暗色,整页无横向溢出;邮箱登记表单与退出确认弹窗只打开查看,未实际提交\n- acceptance-p11-t02、acceptance-t05:未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/3973681b67a737220c25c4bc3f916ca2b687b5ee","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:28:12-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p11-t02.mjs","iam-admin-web/src/pages/EmailRecoveryPage.tsx","iam-admin-web/src/pages/PersonalPage.tsx","iam-admin-web/src/styles/email.css","iam-admin-web/src/styles/personal.css","iam-admin-web/src/test/email-recovery.test.tsx","iam-admin-web/src/test/personal.test.tsx"]},{"id":"2508f797ba72291a981665d5f4fcc4fb86280af8","message":"feat(console): 为技术细节中的编号补充名称与用途注解\n\n技术细节原先只列出编号,部分地方连名称都没有,普通使用者看不懂这串字符是什么、什么时候用得上。本次为各页面技术细节中的编号、版本和代码补充名称与一句用途说明。\n\n实现内容:\n- TechDetails 展开后先显示一句总说明:这些编号用于定位记录,日常不需要关心,反馈问题时可复制给管理员或技术支持\n- DescriptionList 每项新增可选 hint,在值下方显示灰色注解;有注解时值包在 .dlist__value 中,按值定位的测试不受注解文字影响\n- 新增 lib/tech-hints.ts 统一注解文案:对象标识、记录版本、账号标识与成员标识的区别、密钥编号、客户端标识与客户端代码的区别等\n- 工作台账号标识、程序接入新建密钥后的密钥编号、应用接入新建客户端后的客户端标识原先只露出编号,改为带名称的描述列表并加注解\n- 企业、账号、成员、部门、用户组、应用接入、应用开通、角色、授权、程序接入、程序身份、权限查询接入、操作记录、状态变更影响预览中的技术细节逐项补充注解\n- 同步 acceptance-p10-t01、acceptance-t03 中按记录版本值定位的选择器为 dd .dlist__value\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、223 项全部通过(暂时移开个人中心未提交改动后单独运行)\n- 浏览器检查应用接入客户端详情抽屉的技术细节注解显示正常;其余页面未逐页目测\n- acceptance-p10-t01、acceptance-t03:未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/2508f797ba72291a981665d5f4fcc4fb86280af8","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:27:34-07:00","added":["iam-admin-web/src/lib/tech-hints.ts"],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p10-t01.mjs","iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/components/Layout.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/management/ApplicationAdmissionPage.tsx","iam-admin-web/src/pages/management/ApplicationLifecycle.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/AuditPage.tsx","iam-admin-web/src/pages/management/BindingsPage.tsx","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/pages/management/GroupsPage.tsx","iam-admin-web/src/pages/management/MachineClientsPage.tsx","iam-admin-web/src/pages/management/MembersPage.tsx","iam-admin-web/src/pages/management/OrganizationsPage.tsx","iam-admin-web/src/pages/management/PlatformPages.tsx","iam-admin-web/src/pages/management/PlatformTenantPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/pages/management/ServicePrincipalsPage.tsx","iam-admin-web/src/styles/components.css"]},{"id":"e5c32be5d8e106d727495fd92d5b3bf6ab2a3b4f","message":"feat(console): 把权限查询接入改为分区详情抽屉并以选择代替粘贴标识登记\n\n权限查询接入页列表与详情只显示一串 UUID,登记时需要手动粘贴企业、应用、服务三个标识;系统过期后状态仍显示「正常」,管理员无法看出它的查询已被拒绝。本次按控制台已定的列表、抽屉与弹窗样式重排该页。\n\n实现内容:\n- 列表改为「查询的应用 / 所属企业 / 到期时间 / 状态」,应用名称是打开详情的按钮、整行可点;企业与应用名称各读取第一页(最多 100 个),读不到时回退为「类别 + 标识前 8 位」\n- 正常但已过期的系统显示「已过期」徽标并提示查询会被拒绝,正常且 3 天内到期时提前提醒;列表新增定制空状态\n- 详情抽屉分「基本信息(企业、应用、服务名称)/ 密钥说明 / 停用(危险区)」,四个标识与固定查询范围收进技术细节;停用默认收起为按钮,展开后勾选确认、可取消,停用后抽屉保持打开并把焦点留在抽屉上\n- 登记改为两步:平铺列表选正常状态的企业,再用单选卡片选该企业已启用的应用和应用下的服务,填写摘要与到期时间(输入框限定现在至 30 天后);底部为「重新选择企业 / 确认登记」,提交字段与原来一致\n- 公共样式 .card__actions 不再收缩,卡片说明较长时操作按钮保持一行;600px 以下卡片头部换行,按钮排到标题下方\n- 同步登记单测为按企业、应用、服务选择的流程,acceptance-t03 的 A11 改为点击应用名称打开详情、展开停用并等待停用后的说明\n\n验证:\n- npm run format:check、npm run lint:通过\n- npx tsc -b:通过\n- npm run test:26 个测试文件、223 项全部通过\n- 浏览器在演示环境查看 1280 宽、375 窄屏与亮暗色;演示环境未开启登记功能,登记流程用页面内临时拦截请求验证,提交字段正确且未写入后端\n- acceptance-t03:未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/e5c32be5d8e106d727495fd92d5b3bf6ab2a3b4f","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-12T23:49:35-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/styles/components.css","iam-admin-web/src/test/application-management.test.tsx"]}],"total_commits":0,"head_commit":{"id":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/ff5ee33515b0a21b6ba738d00c52373fabfaa50d","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:48:33-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/lib/t03-api.ts","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/AuditPage.tsx","iam-admin-web/src/pages/management/AuthorizationShared.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/styles/applications.css","iam-admin-web/src/styles/audit.css","iam-admin-web/src/styles/authorization.css","iam-admin-web/src/test/application-management.test.tsx","iam-admin-web/src/test/audit.test.tsx","iam-admin-web/src/test/authorization-management.test.tsx"]},"repository":{"id":125,"owner":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"228834386@qq.com","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"name":"IAM","full_name":"pengzhiyu/IAM","description":"Identity and Access Management(身份识别与访问管理)","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":101765,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM/languages","html_url":"https://gitea.g-hi.com/pengzhiyu/IAM","url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM","link":"","ssh_url":"git@gitea.g-hi.com:pengzhiyu/IAM.git","clone_url":"https://gitea.g-hi.com/pengzhiyu/IAM.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-10-08T17:04:24+08:00","updated_at":"2026-10-13T08:51:43+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"sender":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"}}...
|
push
|
3
|
4
|
1791877969
|
1791878086
|
0
|
1791877967
|
1791878086
|
|
|
0
|
Edit
Delete
|
|
25819
|
feat(console): 接入权限说明与操作记录的操作对象快照
|
125
|
16
|
verify.yml
|
8
|
16
|
0
|
refs/heads/main
|
ff5ee33515b0a21b6ba738d00c52373fabfaa50d
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"85e2c17b4829f451e34f938ca6c11354a0b17f30","after":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","compare_url":"https://gitea.g-hi.com/pengzhiyu/IAM/compare/85e2c17b4829f451e34f938ca6c11354a0b17f30...ff5ee33515b0a21b6ba738d00c52373fabfaa50d","commits":[{"id":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/ff5ee33515b0a21b6ba738d00c52373fabfaa50d","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:48:33-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/lib/t03-api.ts","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/AuditPage.tsx","iam-admin-web/src/pages/management/AuthorizationShared.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/styles/applications.css","iam-admin-web/src/styles/audit.css","iam-admin-web/src/styles/authorization.css","iam-admin-web/src/test/application-management.test.tsx","iam-admin-web/src/test/audit.test.tsx","iam-admin-web/src/test/authorization-management.test.tsx"]},{"id":"9631e78cfeee4abd1ccb7e7f777864e4815ded49","message":"chore: 合并 main 引入权限说明与操作对象快照后端\n\n前端接入权限说明与操作记录操作对象前,先把 main 上的后端交付(a435000、536e36c、85e2c17)合入前端分支。\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/9631e78cfeee4abd1ccb7e7f777864e4815ded49","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:33:36-07:00","added":["docs/console/permission-description-audit-target-handoff.md","iam-server/src/main/java/com/iam/server/accounts/AuditTargetSnapshot.java","iam-server/src/main/resources/db/migration/V29__permission_description.sql","iam-server/src/test/java/com/iam/server/protocol/ObservedProtocolFixture.java","iam-server/src/test/java/com/iam/server/protocol/PermissionDescriptionIT.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolPortAllocationIT.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolTestPort.java","iam-server/src/test/java/com/iam/server/security/AuthDiagnosticsTestProbe.java","iam-server/src/test/java/com/iam/server/security/AuthDiagnosticsTestProbeTest.java"],"removed":[],"modified":["docs/audit-security.md","docs/authorization.md","docs/data-foundation.md","docs/schemas/permission-catalog.schema.json","docs/tasks/P12-auth-ingress-attribution-design.md","docs/tasks/P12-software-optimization.md","iam-server/src/main/java/com/iam/server/accounts/AccountStore.java","iam-server/src/main/java/com/iam/server/accounts/AuditReadService.java","iam-server/src/main/java/com/iam/server/accounts/AuthorizationService.java","iam-server/src/main/java/com/iam/server/protocol/RefreshExpiryGuard.java","iam-server/src/main/java/com/iam/server/protocol/RefreshGovernance.java","iam-server/src/main/java/com/iam/server/security/AuthRequestDiagnostics.java","iam-server/src/test/java/com/iam/server/data/AuthorizationMigrationIT.java","iam-server/src/test/java/com/iam/server/data/MigrationIT.java","iam-server/src/test/java/com/iam/server/protocol/AuditReadIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthIngressConservativeIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthIngressLifecycleIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthIngressTimeContractIT.java","iam-server/src/test/java/com/iam/server/protocol/CapacityDiagnosticsTest.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolFixture.java","iam-server/src/test/java/com/iam/server/protocol/RefreshExpiryGuardTest.java","iam-server/src/test/java/com/iam/server/protocol/RefreshExpiryLifecycleIT.java","iam-server/src/test/java/com/iam/server/security/AuthRequestDiagnosticsTest.java","scripts/capacity/auth_diagnostics.py","scripts/capacity/test_auth_diagnostics.py"]},{"id":"3973681b67a737220c25c4bc3f916ca2b687b5ee","message":"feat(console): 重排个人中心并把登录记录改为当前登录加表格\n\n个人中心原先把邮箱、多因素验证放在最前,账号信息压在下方;登录记录每条都是一张大卡片,十几条记录要滚很久,已过期的登录也和当前登录一样醒目。本次按控制台其他页面的布局约定重排个人中心。\n\n实现内容:\n- 上排并列「我的账号」(名字首字头像 + 平台管理身份徽标)与「我的企业」(企业 / 你的身份 / 成员代码三列表格,手机上收窄内边距不必横向滚动)\n- 邮箱与多因素验证合并为「账号安全」卡片,左侧标题与说明、右侧内容,900px 以下上下排列;多因素验证面板与登录页共用,本次未改\n- 邮箱区域改用与多因素验证相同外观的状态摘要(未登记 / 未验证 / 已验证 + 投递状态);登记或发送验证邮件的表单点按钮后就地展开,展开后聚焦第一个字段,提交后无论成败都清除密码;「取消待处理的验证与恢复链接」改名为「作废已发出的邮件链接」并保持常驻(找回密码链接不体现在邮箱状态里)\n- 登录记录拆为「当前这次登录」单独一块(四个时间 + 期限规则)与「其他登录」表格(登录时间 + 编号缩写 / 状态 / 最近使用 / 自动退出于);表格时间用今天、昨天等简短写法,完整时间在悬停提示中\n- 已退出的登录不再显示退出按钮;已过期、已失效的登录仍可退出以撤销业务系统中残留的授权,按钮改为轻量样式,整行弱化\n- 退出确认弹窗底部改为「取消 + 确认退出」,补充最近使用时间,登录编号带名称与注解;账号标识同样带名称与注解\n- 单测改用新的邮箱按钮与字段名,新增「当前登录单独列出、已退出的登录不提供退出按钮」用例;acceptance-p11-t02 同步新的邮箱登记流程与已验证文案,acceptance-t05 依赖的类名与按钮名保持不变\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、224 项全部通过\n- 浏览器检查 1280 宽、375 窄屏与亮暗色,整页无横向溢出;邮箱登记表单与退出确认弹窗只打开查看,未实际提交\n- acceptance-p11-t02、acceptance-t05:未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/3973681b67a737220c25c4bc3f916ca2b687b5ee","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:28:12-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p11-t02.mjs","iam-admin-web/src/pages/EmailRecoveryPage.tsx","iam-admin-web/src/pages/PersonalPage.tsx","iam-admin-web/src/styles/email.css","iam-admin-web/src/styles/personal.css","iam-admin-web/src/test/email-recovery.test.tsx","iam-admin-web/src/test/personal.test.tsx"]},{"id":"2508f797ba72291a981665d5f4fcc4fb86280af8","message":"feat(console): 为技术细节中的编号补充名称与用途注解\n\n技术细节原先只列出编号,部分地方连名称都没有,普通使用者看不懂这串字符是什么、什么时候用得上。本次为各页面技术细节中的编号、版本和代码补充名称与一句用途说明。\n\n实现内容:\n- TechDetails 展开后先显示一句总说明:这些编号用于定位记录,日常不需要关心,反馈问题时可复制给管理员或技术支持\n- DescriptionList 每项新增可选 hint,在值下方显示灰色注解;有注解时值包在 .dlist__value 中,按值定位的测试不受注解文字影响\n- 新增 lib/tech-hints.ts 统一注解文案:对象标识、记录版本、账号标识与成员标识的区别、密钥编号、客户端标识与客户端代码的区别等\n- 工作台账号标识、程序接入新建密钥后的密钥编号、应用接入新建客户端后的客户端标识原先只露出编号,改为带名称的描述列表并加注解\n- 企业、账号、成员、部门、用户组、应用接入、应用开通、角色、授权、程序接入、程序身份、权限查询接入、操作记录、状态变更影响预览中的技术细节逐项补充注解\n- 同步 acceptance-p10-t01、acceptance-t03 中按记录版本值定位的选择器为 dd .dlist__value\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、223 项全部通过(暂时移开个人中心未提交改动后单独运行)\n- 浏览器检查应用接入客户端详情抽屉的技术细节注解显示正常;其余页面未逐页目测\n- acceptance-p10-t01、acceptance-t03:未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/2508f797ba72291a981665d5f4fcc4fb86280af8","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:27:34-07:00","added":["iam-admin-web/src/lib/tech-hints.ts"],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p10-t01.mjs","iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/components/Layout.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/management/ApplicationAdmissionPage.tsx","iam-admin-web/src/pages/management/ApplicationLifecycle.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/AuditPage.tsx","iam-admin-web/src/pages/management/BindingsPage.tsx","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/pages/management/GroupsPage.tsx","iam-admin-web/src/pages/management/MachineClientsPage.tsx","iam-admin-web/src/pages/management/MembersPage.tsx","iam-admin-web/src/pages/management/OrganizationsPage.tsx","iam-admin-web/src/pages/management/PlatformPages.tsx","iam-admin-web/src/pages/management/PlatformTenantPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/pages/management/ServicePrincipalsPage.tsx","iam-admin-web/src/styles/components.css"]},{"id":"e5c32be5d8e106d727495fd92d5b3bf6ab2a3b4f","message":"feat(console): 把权限查询接入改为分区详情抽屉并以选择代替粘贴标识登记\n\n权限查询接入页列表与详情只显示一串 UUID,登记时需要手动粘贴企业、应用、服务三个标识;系统过期后状态仍显示「正常」,管理员无法看出它的查询已被拒绝。本次按控制台已定的列表、抽屉与弹窗样式重排该页。\n\n实现内容:\n- 列表改为「查询的应用 / 所属企业 / 到期时间 / 状态」,应用名称是打开详情的按钮、整行可点;企业与应用名称各读取第一页(最多 100 个),读不到时回退为「类别 + 标识前 8 位」\n- 正常但已过期的系统显示「已过期」徽标并提示查询会被拒绝,正常且 3 天内到期时提前提醒;列表新增定制空状态\n- 详情抽屉分「基本信息(企业、应用、服务名称)/ 密钥说明 / 停用(危险区)」,四个标识与固定查询范围收进技术细节;停用默认收起为按钮,展开后勾选确认、可取消,停用后抽屉保持打开并把焦点留在抽屉上\n- 登记改为两步:平铺列表选正常状态的企业,再用单选卡片选该企业已启用的应用和应用下的服务,填写摘要与到期时间(输入框限定现在至 30 天后);底部为「重新选择企业 / 确认登记」,提交字段与原来一致\n- 公共样式 .card__actions 不再收缩,卡片说明较长时操作按钮保持一行;600px 以下卡片头部换行,按钮排到标题下方\n- 同步登记单测为按企业、应用、服务选择的流程,acceptance-t03 的 A11 改为点击应用名称打开详情、展开停用并等待停用后的说明\n\n验证:\n- npm run format:check、npm run lint:通过\n- npx tsc -b:通过\n- npm run test:26 个测试文件、223 项全部通过\n- 浏览器在演示环境查看 1280 宽、375 窄屏与亮暗色;演示环境未开启登记功能,登记流程用页面内临时拦截请求验证,提交字段正确且未写入后端\n- acceptance-t03:未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/e5c32be5d8e106d727495fd92d5b3bf6ab2a3b4f","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-12T23:49:35-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/styles/components.css","iam-admin-web/src/test/application-management.test.tsx"]}],"total_commits":0,"head_commit":{"id":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/ff5ee33515b0a21b6ba738d00c52373fabfaa50d","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T00:48:33-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/lib/t03-api.ts","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/AuditPage.tsx","iam-admin-web/src/pages/management/AuthorizationShared.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/styles/applications.css","iam-admin-web/src/styles/audit.css","iam-admin-web/src/styles/authorization.css","iam-admin-web/src/test/application-management.test.tsx","iam-admin-web/src/test/audit.test.tsx","iam-admin-web/src/test/authorization-management.test.tsx"]},"repository":{"id":125,"owner":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"228834386@qq.com","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"name":"IAM","full_name":"pengzhiyu/IAM","description":"Identity and Access Management(身份识别与访问管理)","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":102073,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM/languages","html_url":"https://gitea.g-hi.com/pengzhiyu/IAM","url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM","link":"","ssh_url":"git@gitea.g-hi.com:pengzhiyu/IAM.git","clone_url":"https://gitea.g-hi.com/pengzhiyu/IAM.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-10-08T17:04:24+08:00","updated_at":"2026-10-13T15:52:47+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"sender":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"}}...
|
push
|
3
|
4
|
1791878088
|
1791878106
|
0
|
1791877984
|
1791878106
|
|
|
0
|
Edit
Delete
|
|
25820
|
feat(console): 合并应用中心导航、权限清单按行修改与概览页重排
|
125
|
16
|
verify.yml
|
9
|
16
|
0
|
refs/heads/main
|
cf70e039ad30edff8e3a51877be4561ed564e95f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","after":"cf70e039ad30edff8e3a51877be4561ed564e95f","compare_url":"https://gitea.g-hi.com/pengzhiyu/IAM/compare/ff5ee33515b0a21b6ba738d00c52373fabfaa50d...cf70e039ad30edff8e3a51877be4561ed564e95f","commits":[{"id":"cf70e039ad30edff8e3a51877be4561ed564e95f","message":"feat(console): 合并应用中心导航、权限清单按行修改与概览页重排\n\nmain 停在 ff5ee33 之后,控制台仍是旧的侧栏分组、权限清单整体编辑和早期概览页布局。合并 feat/console-layout 上其后的 4 个前端提交,完成控制台全部页面的布局改造。\n\n实现内容:\n- 权限清单把新增与修改拆开,平台侧支持按行修改名称与说明,企业侧「可用权限」提供去平台修改的入口;权限名称等于代码时编辑弹窗不再预填代码,用户组事件标签改为「创建用户组」\n- 转义 5 处代码输入框 pattern 中的连字符\n- 侧栏分为「平台管理 / 应用 / 企业管理 / 应用授权」四组,应用定义独立成「应用」分组(网址仍为 /platform/applications),统一「应用列表」「权限定义与资源规则」「所有企业共用」「可用权限」等命名\n- 工作台改为平台管理 / 应用 / 企业管理三个并列入口,加上「我的企业」表格与账号摘要;平台概览的「需要你关注」三类事项固定列出;企业概览的应用改为表格;应用概览的三步引导放进卡片并显示进度;三个概览的功能入口按用途分两栏\n\n验证:\n- 分支上各提交前运行 format:check、lint、typecheck 与 Vitest,最后一次 27 个测试文件、234 项全部通过\n- 合并无冲突,只涉及 iam-admin-web/ 下的文件;main 上相对分支只多出 568be88(两处集成测试),合并后的前端文件与分支末端 695ea4d 一致\n- main 上未单独重新运行检查;验收脚本未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/cf70e039ad30edff8e3a51877be4561ed564e95f","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T07:22:40-07:00","added":["iam-admin-web/src/test/home.test.tsx"],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p10-t02.mjs","iam-admin-web/scripts/acceptance-p10-t03.mjs","iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/data/pages.ts","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/ScopePages.tsx","iam-admin-web/src/pages/TenantOverview.tsx","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/BindingScopes.tsx","iam-admin-web/src/pages/management/BindingsPage.tsx","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/pages/management/ServicePrincipalsPage.tsx","iam-admin-web/src/shell/ContextSwitcher.tsx","iam-admin-web/src/shell/ContextTrail.tsx","iam-admin-web/src/shell/NavRail.tsx","iam-admin-web/src/shell/scope.tsx","iam-admin-web/src/styles/layout.css","iam-admin-web/src/styles/management.css","iam-admin-web/src/styles/pages.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/application-management.test.tsx","iam-admin-web/src/test/platform-overview.test.tsx","iam-admin-web/src/test/sidebar.test.tsx","iam-admin-web/src/test/tenant-overview.test.tsx"]},{"id":"568be8853874bf5d720f1c49e060edd5f4d20825","message":"test(protocol): 按完整迁移历史校验模式切换与启动反例\n\n新增 V29 后,两处固定最高迁移版本为 28 的测试不再符合当前完整提交。改为核对动作前后历史保持,避免每次新增迁移重复修改版本预期。\n\n实现内容:\n- 仅修改 ScopedLifecycleIT 和 IdentityReadLifecycleIT 两处迁移断言\n- 按 installed_rank 比较全部 version、checksum、success,显式要求 V27、V28 已成功\n- 保留并发互斥、释放、SCOPED 函数缺失反例及原安全断言\n\n验证:\n- Java 25,在独立快照执行 ./mvnw -o -B -ntp -pl iam-server -am verify -Dit.test=ScopedLifecycleIT,IdentityReadLifecycleIT -Dfailsafe.failIfNoSpecifiedTests=false -Dfailsafe.skipAfterFailureCount=1 -Dsurefire.skipAfterFailureCount=1:通过\n- 180 项单测、ScopedLifecycleIT 9 项及 IdentityReadLifecycleIT 40 项集成通过,零失败、错误或跳过;格式、编译和打包通过\n- git diff --check:通过\n- 本提交前未运行含控制台全量验收;随后从最新完整提交另建快照验证\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/568be8853874bf5d720f1c49e060edd5f4d20825","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T07:00:04-07:00","added":[],"removed":[],"modified":["iam-server/src/test/java/com/iam/server/protocol/IdentityReadLifecycleIT.java","iam-server/src/test/java/com/iam/server/protocol/ScopedLifecycleIT.java"]},{"id":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","message":"feat(console): 重排工作台与平台、企业、应用三个概览页\n\n四个概览页此前沿用早期布局:工作台只有两个入口,待办和应用用零散小卡片展示,功能入口不分组,与已改造的列表页风格不一致。本次按「上方状态卡片、下方两栏分组入口」统一四页布局。\n\n实现内容:\n- 工作台:三个并列入口「平台管理 / 应用 / 企业管理」,新增应用配色 entry--apps;应用管理员入口写明负责的应用,无身份的入口锁定并说明原因\n- 工作台新增「我的企业」可点表格(企业、你的身份,每次读取 10 条,满页时可加载更多),账号摘要放侧栏并链接个人中心,基本概念改为四格横排\n- 平台概览:「需要你关注」改为卡片,三类事项固定列出,没有内容时显示对勾与「目前没有。」,有内容时显示数量、最多 3 个名称与处理入口,读取失败只在该行重试\n- 企业概览:本企业的应用改为卡片内表格,停用的应用不可进入并注明原因;空状态改用公共 EmptyList\n- 应用概览:三步引导放进卡片,步骤之间用分隔线,右上角显示完成进度;任一步读取中或失败时不显示进度\n- 三个概览的功能入口统一用 overview-groups 两栏分组,窄屏改为上下排列;删除不再使用的待办卡片、应用卡片与一切正常提示条样式\n\n验证:\n- npm run typecheck、npm run lint、npm run format:check:通过\n- npm run test:27 个测试文件、234 项通过(同步修改平台、企业、应用概览单测,新增 home.test.tsx 4 项)\n- 浏览器检查 1280 宽、375 窄屏与暗色:四页无页面级横向溢出;待办与停用应用状态用页面内临时拦截 fetch 验证\n- 验收脚本未运行(脚本只依赖「工作台」标题与 .entry--locked,均已保留)\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/695ea4d16f5066a81e3808b0ba4432b2a69cbd87","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:50:19-07:00","added":["iam-admin-web/src/test/home.test.tsx"],"removed":[],"modified":["iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/TenantOverview.tsx","iam-admin-web/src/styles/pages.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/platform-overview.test.tsx","iam-admin-web/src/test/tenant-overview.test.tsx"]},{"id":"ceb5884bba8e1274c550348e99226f46614e6511","message":"feat(console): 把应用定义独立成「应用」分组并统一权限相关命名\n\nIAM 面向多租户,一个应用登记后可由多家企业开通。原导航把应用的全局定义(登录客户端、受保护的服务、权限与资源规则)放在「平台管理」下,企业内的应用授权又叫「应用管理」,使用者难以分清权限为何不在应用层维护、改了会影响谁。\n\n实现内容:\n- 侧边栏改为「平台管理 / 应用 / 企业管理 / 应用授权」四组:平台管理只对平台管理员展示链接;新增「应用」分组(应用列表),平台管理员与应用管理员可见;原「应用管理」改名「应用授权」;网址保持不变\n- 应用详情网址仍在 /platform/applications 下,导航高亮、顶部上下文标识(「应用定义」)与面包屑(应用 › 应用列表)归入「应用」\n- 平台侧「应用接入」改为「应用列表」、「权限清单与资源规则」改为「权限定义与资源规则」,徽标改为「所有企业共用」,权限定义卡片与修改弹窗写明对所有开通企业生效\n- 企业侧「权限清单」改为「可用权限」,入口改为「修改权限定义」;工作台、平台概览、切换对话框、无权限说明、操作记录操作名称及相关提示同步新命名\n- 侧边栏测试改为可切换平台角色,新增平台管理员与应用管理员分组可见性用例;弹出面板测试先等待焦点进入面板再按 Esc,消除原有时序抖动\n- acceptance-t03、acceptance-p10-t02、acceptance-p10-t03 同步新的标签名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、230 项通过;侧边栏测试单独连续运行 5 次均通过\n- 浏览器经 5173 连接演示后端,在 1280 宽、375 窄屏及亮/暗色下检查四个分组、应用详情、企业可用权限与跳转、修改弹窗影响说明:正常\n- 应用管理员视角仅有单元测试覆盖(演示环境无应用管理员账号);验收脚本未运行\n- 「已在 N 个企业开通」需后端提供按应用统计的接口,本次未实现\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/ceb5884bba8e1274c550348e99226f46614e6511","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:36:58-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p10-t02.mjs","iam-admin-web/scripts/acceptance-p10-t03.mjs","iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/data/pages.ts","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/ScopePages.tsx","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/BindingScopes.tsx","iam-admin-web/src/pages/management/BindingsPage.tsx","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/shell/ContextSwitcher.tsx","iam-admin-web/src/shell/ContextTrail.tsx","iam-admin-web/src/shell/NavRail.tsx","iam-admin-web/src/shell/scope.tsx","iam-admin-web/src/styles/layout.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/sidebar.test.tsx"]},{"id":"7a1bd50d627fb56ebd548956a8a05c61fd306f64","message":"fix(console): 转义代码输入框 pattern 中的连字符\n\n浏览器按 v 模式编译 input 的 pattern,字符类末尾未转义的「-」会被判为非法正则,浏览器报错并直接跳过该格式校验。其余页面已使用转义写法,本次统一。\n\n实现内容:\n- 权限代码(新增权限、资源类型代码)、角色代码、程序身份代码、应用代码共 5 处 pattern 改为 \\- 转义,匹配规则不变\n\n验证:\n- 两种写法用 new RegExp(..., 'v') 编译通过\n- 浏览器中新增权限弹窗输入 Bad-Code 时 validity.patternMismatch 为 true\n- npm run format:check、npm run lint、npm run typecheck:通过;npm test:26 个测试文件、228 项通过\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/7a1bd50d627fb56ebd548956a8a05c61fd306f64","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:11:02-07:00","added":[],"removed":[],"modified":["iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/pages/management/ServicePrincipalsPage.tsx"]}],"total_commits":0,"head_commit":{"id":"cf70e039ad30edff8e3a51877be4561ed564e95f","message":"feat(console): 合并应用中心导航、权限清单按行修改与概览页重排\n\nmain 停在 ff5ee33 之后,控制台仍是旧的侧栏分组、权限清单整体编辑和早期概览页布局。合并 feat/console-layout 上其后的 4 个前端提交,完成控制台全部页面的布局改造。\n\n实现内容:\n- 权限清单把新增与修改拆开,平台侧支持按行修改名称与说明,企业侧「可用权限」提供去平台修改的入口;权限名称等于代码时编辑弹窗不再预填代码,用户组事件标签改为「创建用户组」\n- 转义 5 处代码输入框 pattern 中的连字符\n- 侧栏分为「平台管理 / 应用 / 企业管理 / 应用授权」四组,应用定义独立成「应用」分组(网址仍为 /platform/applications),统一「应用列表」「权限定义与资源规则」「所有企业共用」「可用权限」等命名\n- 工作台改为平台管理 / 应用 / 企业管理三个并列入口,加上「我的企业」表格与账号摘要;平台概览的「需要你关注」三类事项固定列出;企业概览的应用改为表格;应用概览的三步引导放进卡片并显示进度;三个概览的功能入口按用途分两栏\n\n验证:\n- 分支上各提交前运行 format:check、lint、typecheck 与 Vitest,最后一次 27 个测试文件、234 项全部通过\n- 合并无冲突,只涉及 iam-admin-web/ 下的文件;main 上相对分支只多出 568be88(两处集成测试),合并后的前端文件与分支末端 695ea4d 一致\n- main 上未单独重新运行检查;验收脚本未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/cf70e039ad30edff8e3a51877be4561ed564e95f","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T07:22:40-07:00","added":["iam-admin-web/src/test/home.test.tsx"],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p10-t02.mjs","iam-admin-web/scripts/acceptance-p10-t03.mjs","iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/data/pages.ts","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/ScopePages.tsx","iam-admin-web/src/pages/TenantOverview.tsx","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/BindingScopes.tsx","iam-admin-web/src/pages/management/BindingsPage.tsx","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/pages/management/ServicePrincipalsPage.tsx","iam-admin-web/src/shell/ContextSwitcher.tsx","iam-admin-web/src/shell/ContextTrail.tsx","iam-admin-web/src/shell/NavRail.tsx","iam-admin-web/src/shell/scope.tsx","iam-admin-web/src/styles/layout.css","iam-admin-web/src/styles/management.css","iam-admin-web/src/styles/pages.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/application-management.test.tsx","iam-admin-web/src/test/platform-overview.test.tsx","iam-admin-web/src/test/sidebar.test.tsx","iam-admin-web/src/test/tenant-overview.test.tsx"]},"repository":{"id":125,"owner":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"228834386@qq.com","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"name":"IAM","full_name":"pengzhiyu/IAM","description":"Identity and Access Management(身份识别与访问管理)","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":102073,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM/languages","html_url":"https://gitea.g-hi.com/pengzhiyu/IAM","url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM","link":"","ssh_url":"git@gitea.g-hi.com:pengzhiyu/IAM.git","clone_url":"https://gitea.g-hi.com/pengzhiyu/IAM.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-10-08T17:04:24+08:00","updated_at":"2026-10-13T15:53:04+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"sender":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"}}...
|
push
|
2
|
4
|
1791901404
|
1791901620
|
0
|
1791901403
|
1791901620
|
|
|
0
|
Edit
Delete
|
|
25821
|
feat(console): 重排工作台与平台、企业、应用三个概览页
|
125
|
16
|
verify.yml
|
10
|
16
|
0
|
refs/heads/feat/console-layout
|
695ea4d16f5066a81e3808b0ba4432b2a69cbd87
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/feat/console-layout {"ref":"refs/heads/feat/console-layout","before":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","after":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","compare_url":"https://gitea.g-hi.com/pengzhiyu/IAM/compare/ff5ee33515b0a21b6ba738d00c52373fabfaa50d...695ea4d16f5066a81e3808b0ba4432b2a69cbd87","commits":[{"id":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","message":"feat(console): 重排工作台与平台、企业、应用三个概览页\n\n四个概览页此前沿用早期布局:工作台只有两个入口,待办和应用用零散小卡片展示,功能入口不分组,与已改造的列表页风格不一致。本次按「上方状态卡片、下方两栏分组入口」统一四页布局。\n\n实现内容:\n- 工作台:三个并列入口「平台管理 / 应用 / 企业管理」,新增应用配色 entry--apps;应用管理员入口写明负责的应用,无身份的入口锁定并说明原因\n- 工作台新增「我的企业」可点表格(企业、你的身份,每次读取 10 条,满页时可加载更多),账号摘要放侧栏并链接个人中心,基本概念改为四格横排\n- 平台概览:「需要你关注」改为卡片,三类事项固定列出,没有内容时显示对勾与「目前没有。」,有内容时显示数量、最多 3 个名称与处理入口,读取失败只在该行重试\n- 企业概览:本企业的应用改为卡片内表格,停用的应用不可进入并注明原因;空状态改用公共 EmptyList\n- 应用概览:三步引导放进卡片,步骤之间用分隔线,右上角显示完成进度;任一步读取中或失败时不显示进度\n- 三个概览的功能入口统一用 overview-groups 两栏分组,窄屏改为上下排列;删除不再使用的待办卡片、应用卡片与一切正常提示条样式\n\n验证:\n- npm run typecheck、npm run lint、npm run format:check:通过\n- npm run test:27 个测试文件、234 项通过(同步修改平台、企业、应用概览单测,新增 home.test.tsx 4 项)\n- 浏览器检查 1280 宽、375 窄屏与暗色:四页无页面级横向溢出;待办与停用应用状态用页面内临时拦截 fetch 验证\n- 验收脚本未运行(脚本只依赖「工作台」标题与 .entry--locked,均已保留)\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/695ea4d16f5066a81e3808b0ba4432b2a69cbd87","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:50:19-07:00","added":["iam-admin-web/src/test/home.test.tsx"],"removed":[],"modified":["iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/TenantOverview.tsx","iam-admin-web/src/styles/pages.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/platform-overview.test.tsx","iam-admin-web/src/test/tenant-overview.test.tsx"]},{"id":"ceb5884bba8e1274c550348e99226f46614e6511","message":"feat(console): 把应用定义独立成「应用」分组并统一权限相关命名\n\nIAM 面向多租户,一个应用登记后可由多家企业开通。原导航把应用的全局定义(登录客户端、受保护的服务、权限与资源规则)放在「平台管理」下,企业内的应用授权又叫「应用管理」,使用者难以分清权限为何不在应用层维护、改了会影响谁。\n\n实现内容:\n- 侧边栏改为「平台管理 / 应用 / 企业管理 / 应用授权」四组:平台管理只对平台管理员展示链接;新增「应用」分组(应用列表),平台管理员与应用管理员可见;原「应用管理」改名「应用授权」;网址保持不变\n- 应用详情网址仍在 /platform/applications 下,导航高亮、顶部上下文标识(「应用定义」)与面包屑(应用 › 应用列表)归入「应用」\n- 平台侧「应用接入」改为「应用列表」、「权限清单与资源规则」改为「权限定义与资源规则」,徽标改为「所有企业共用」,权限定义卡片与修改弹窗写明对所有开通企业生效\n- 企业侧「权限清单」改为「可用权限」,入口改为「修改权限定义」;工作台、平台概览、切换对话框、无权限说明、操作记录操作名称及相关提示同步新命名\n- 侧边栏测试改为可切换平台角色,新增平台管理员与应用管理员分组可见性用例;弹出面板测试先等待焦点进入面板再按 Esc,消除原有时序抖动\n- acceptance-t03、acceptance-p10-t02、acceptance-p10-t03 同步新的标签名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、230 项通过;侧边栏测试单独连续运行 5 次均通过\n- 浏览器经 5173 连接演示后端,在 1280 宽、375 窄屏及亮/暗色下检查四个分组、应用详情、企业可用权限与跳转、修改弹窗影响说明:正常\n- 应用管理员视角仅有单元测试覆盖(演示环境无应用管理员账号);验收脚本未运行\n- 「已在 N 个企业开通」需后端提供按应用统计的接口,本次未实现\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/ceb5884bba8e1274c550348e99226f46614e6511","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:36:58-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-p10-t02.mjs","iam-admin-web/scripts/acceptance-p10-t03.mjs","iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/data/pages.ts","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/ScopePages.tsx","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/BindingScopes.tsx","iam-admin-web/src/pages/management/BindingsPage.tsx","iam-admin-web/src/pages/management/DecisionCallersPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/shell/ContextSwitcher.tsx","iam-admin-web/src/shell/ContextTrail.tsx","iam-admin-web/src/shell/NavRail.tsx","iam-admin-web/src/shell/scope.tsx","iam-admin-web/src/styles/layout.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/sidebar.test.tsx"]},{"id":"7a1bd50d627fb56ebd548956a8a05c61fd306f64","message":"fix(console): 转义代码输入框 pattern 中的连字符\n\n浏览器按 v 模式编译 input 的 pattern,字符类末尾未转义的「-」会被判为非法正则,浏览器报错并直接跳过该格式校验。其余页面已使用转义写法,本次统一。\n\n实现内容:\n- 权限代码(新增权限、资源类型代码)、角色代码、程序身份代码、应用代码共 5 处 pattern 改为 \\- 转义,匹配规则不变\n\n验证:\n- 两种写法用 new RegExp(..., 'v') 编译通过\n- 浏览器中新增权限弹窗输入 Bad-Code 时 validity.patternMismatch 为 true\n- npm run format:check、npm run lint、npm run typecheck:通过;npm test:26 个测试文件、228 项通过\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/7a1bd50d627fb56ebd548956a8a05c61fd306f64","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:11:02-07:00","added":[],"removed":[],"modified":["iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/ApplicationsPage.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/pages/management/ServicePrincipalsPage.tsx"]},{"id":"54b1e1ee340da10ec01235cc9d1cf8d6ca22ca5c","message":"feat(console): 把权限清单的新增与修改拆开并支持按行修改\n\n平台权限清单原先只有一个「新增或修改权限」入口,要修改已有权限必须手输准确的代码,输错会误建一项不能删除的权限;企业侧只读权限清单也看不出该去哪里修改。\n\n实现内容:\n- 平台权限清单每行增加「修改」:代码只读展示,名称和说明预填,内容未变不能保存,修改不再要求勾选确认\n- 未设置名称的权限名称框留空且可留空,只改说明时名称保持原样;已停用的权限也可修改名称和说明\n- 顶部按钮改为「新增权限」:代码与已有权限重复时拦下并引导到列表「修改」,新增仍需勾选确认\n- 企业侧应用权限清单在平台管理员或该应用的应用管理员登录时,页头显示「去平台修改权限」入口\n- 操作记录中 authorization.group_changed 改称「创建用户组」(后端只在新建用户组时写入)\n- 表格行末操作按钮新增 management-actions--end 靠右排列\n- acceptance-t03 改用「新增权限」按钮,并把提交按钮限定在弹窗内\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、228 项通过(新增修改模式与新增重复代码拦截用例)\n- 浏览器经 5173 连接演示后端实际保存:只填说明保存成功且名称保持原样、其余权限说明保留、清单版本逐次加 1;重复代码被拦下;企业侧入口跳转与说明显示正常\n- acceptance-t03 未运行\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/54b1e1ee340da10ec01235cc9d1cf8d6ca22ca5c","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:10:34-07:00","added":[],"removed":[],"modified":["iam-admin-web/scripts/acceptance-t03.mjs","iam-admin-web/src/lib/audit-actions.ts","iam-admin-web/src/pages/management/ApplicationContracts.tsx","iam-admin-web/src/pages/management/RolesPage.tsx","iam-admin-web/src/styles/management.css","iam-admin-web/src/test/application-management.test.tsx"]}],"total_commits":0,"head_commit":{"id":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","message":"feat(console): 重排工作台与平台、企业、应用三个概览页\n\n四个概览页此前沿用早期布局:工作台只有两个入口,待办和应用用零散小卡片展示,功能入口不分组,与已改造的列表页风格不一致。本次按「上方状态卡片、下方两栏分组入口」统一四页布局。\n\n实现内容:\n- 工作台:三个并列入口「平台管理 / 应用 / 企业管理」,新增应用配色 entry--apps;应用管理员入口写明负责的应用,无身份的入口锁定并说明原因\n- 工作台新增「我的企业」可点表格(企业、你的身份,每次读取 10 条,满页时可加载更多),账号摘要放侧栏并链接个人中心,基本概念改为四格横排\n- 平台概览:「需要你关注」改为卡片,三类事项固定列出,没有内容时显示对勾与「目前没有。」,有内容时显示数量、最多 3 个名称与处理入口,读取失败只在该行重试\n- 企业概览:本企业的应用改为卡片内表格,停用的应用不可进入并注明原因;空状态改用公共 EmptyList\n- 应用概览:三步引导放进卡片,步骤之间用分隔线,右上角显示完成进度;任一步读取中或失败时不显示进度\n- 三个概览的功能入口统一用 overview-groups 两栏分组,窄屏改为上下排列;删除不再使用的待办卡片、应用卡片与一切正常提示条样式\n\n验证:\n- npm run typecheck、npm run lint、npm run format:check:通过\n- npm run test:27 个测试文件、234 项通过(同步修改平台、企业、应用概览单测,新增 home.test.tsx 4 项)\n- 浏览器检查 1280 宽、375 窄屏与暗色:四页无页面级横向溢出;待办与停用应用状态用页面内临时拦截 fetch 验证\n- 验收脚本未运行(脚本只依赖「工作台」标题与 .entry--locked,均已保留)\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/695ea4d16f5066a81e3808b0ba4432b2a69cbd87","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-13T06:50:19-07:00","added":["iam-admin-web/src/test/home.test.tsx"],"removed":[],"modified":["iam-admin-web/src/pages/AppOverview.tsx","iam-admin-web/src/pages/HomePage.tsx","iam-admin-web/src/pages/PlatformOverview.tsx","iam-admin-web/src/pages/TenantOverview.tsx","iam-admin-web/src/styles/pages.css","iam-admin-web/src/test/app-overview.test.tsx","iam-admin-web/src/test/platform-overview.test.tsx","iam-admin-web/src/test/tenant-overview.test.tsx"]},"repository":{"id":125,"owner":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"228834386@qq.com","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"name":"IAM","full_name":"pengzhiyu/IAM","description":"Identity and Access Management(身份识别与访问管理)","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":102367,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM/languages","html_url":"https://gitea.g-hi.com/pengzhiyu/IAM","url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM","link":"","ssh_url":"git@gitea.g-hi.com:pengzhiyu/IAM.git","clone_url":"https://gitea.g-hi.com/pengzhiyu/IAM.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-10-08T17:04:24+08:00","updated_at":"2026-10-13T22:23:23+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"sender":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"}}...
|
push
|
2
|
4
|
1791901620
|
1791901831
|
0
|
1791901432
|
1791901831
|
|
|
0
|
Edit
Delete
|