Files
election-system/docs/admin-management.md
T
biss 08fe656480 - 选民、计票所列表改为每页 50 条的游标分页,支持上一页/下一页。
- 加入省→市→区县→镇街四级连锁筛选;镇街筛选会包含其下属村级数据。
- 服务端 API 增加:
  - GET /api/admin/voters/cursor
  - GET /api/admin/counting-stations/cursor
- 服务端会先执行管理员地域授权和行政层级校验,再应用筛选与游标;非法游标、跨层级或越权地区参数返回 400。
- 所有 Blazor 管理页面已启用 Interactive Server,按钮、表单和分页不再只是静态外壳。
- 更新了管理端说明:[admin-management.md](E:\election system\docs\admin-management.md)。
验证通过:dotnet build 0 错误,dotnet test 8/8 通过。尚未在实际浏览器和 MySQL 数据库中做联调
2026-08-29 20:01:02 +08:00

37 lines
2.7 KiB
Markdown

# 管理端使用说明
管理端入口为 `/admin`。未认证请求会返回 `401`,不会展示任何选民、候选人、计票所或区域数据。
## 身份配置
主站使用 ASP.NET Core Identity 保存本地用户名、密码哈希、失败次数、锁定时间与安全戳;浏览器管理端使用 `__Host-election-auth` 安全 Cookie。登录入口是 `/account/login`,退出使用 `POST /account/logout`。
首次部署时,先执行数据库迁移,再通过用户机密或环境变量提供一次性的首个系统管理员信息:
```powershell
dotnet user-secrets set "Bootstrap:SystemAdministrator:UserName" "admin" --project src/ElectionSystem.Api
dotnet user-secrets set "Bootstrap:SystemAdministrator:DisplayName" "系统管理员" --project src/ElectionSystem.Api
dotnet user-secrets set "Bootstrap:SystemAdministrator:Password" "替换为至少12位的高强度密码" --project src/ElectionSystem.Api
```
应用启动后会创建该账号并授予无地域绑定的 `SystemAdministrator`。确认首次登录成功后,立即删除密码机密:
```powershell
dotnet user-secrets remove "Bootstrap:SystemAdministrator:Password" --project src/ElectionSystem.Api
```
此后在“本地用户”页面创建、停用、恢复及重置其他账号密码,再在“地域角色”页面授权业务范围。停用或重置密码会更新安全戳,使既有 Cookie 会话失效。
## 页面职责
- `/admin/dashboard`:仅显示当前授权范围内的汇总。
- `/admin/regions` 与 `/admin/region-import`:系统管理员导入 AreaCity 四级目录;村/社区使用本地确认目录。
- `/admin/voters` 与 `/admin/voter-import`:按地域维护选民、预校验并确认 Excel 导入。选民列表使用每页 50 条的游标分页,并支持省→市→区县→镇街四级级联筛选。
- `/admin/candidates`:维护候选人资料和服务端允许的状态转换。
- `/admin/roles`:系统管理员授予地域管理员、计票员或监督员角色。
- `/admin/counting-stations`:建立辖区计票所,并向已获地域角色的人员分配具体计票所;列表同样使用游标分页及四级级联筛选。
对应管理 API 提供 `GET /api/admin/voters/cursor` 与 `GET /api/admin/counting-stations/cursor`。`cursor` 只能用于同一组筛选条件;筛选范围、下级地域展开和管理员地域授权均在服务端先行执行。非法游标或跨层级、越权的行政区划参数会返回 `400`,不会放宽数据范围。
管理端用于第二阶段基础资料与授权操作。选举活动、匿名投票、线下双录计票和公开结果将在后续阶段接入相应菜单,且不会通过本阶段页面绕过其规则。