TermiNexus
|
792b76fb46
|
feat(gerp): 新增按公司查询已启用应用接口 /API/App/CompanyApps
公司详情页需要展示该公司启用的应用并支持卸载/配置,原 /API/App/ManageCompanies 是反向(按应用查公司安装状态),故补正查接口:AppManager.ListCompanyEnabledApps 按公司列出 InstallStatus=1 的应用,AppCompanyAppsView 按可管理范围校验(super=全部 / tenant=本租户 / company=被授权公司)。
|
2026-09-29 18:50:10 +08:00 |
|
TermiNexus
|
6bff657664
|
chore(部署): 同步 GVSite 构建产物(index-ChcQqzKc.js)
|
2026-09-29 15:10:35 +08:00 |
|
TermiNexus
|
e47301c5aa
|
chore(部署): 同步 GVSite 构建产物(index-DTdY4Pdj.js)
|
2026-09-29 15:05:27 +08:00 |
|
TermiNexus
|
7c142f7096
|
chore(部署): 同步 GVSite 构建产物(index-niIICfbh.js)
|
2026-09-29 14:26:18 +08:00 |
|
TermiNexus
|
7f13f2a54b
|
chore(部署): 同步 GVSite 构建产物(Viper 底层篇幅 / index-Kj6tcCYs.js)
|
2026-09-29 14:21:16 +08:00 |
|
TermiNexus
|
7df818f1e7
|
chore(template): 同步 GVSite 构建入口 hash
Viper 专题编译器源码链接改指 TransPyV 后重新构建的入口 hash 同步。
|
2026-09-29 14:17:59 +08:00 |
|
TermiNexus
|
ef4d462b08
|
chore(template): 同步 GVSite 构建入口 hash
Viper 排序示例改为引用传参后重新构建的入口 hash 同步。
|
2026-09-29 14:13:48 +08:00 |
|
TermiNexus
|
75653cdf95
|
chore(template): 同步 GVSite 构建入口 hash
Viper 排序示例改用 len() 后重新构建的入口 hash 同步。
|
2026-09-29 14:12:07 +08:00 |
|
TermiNexus
|
e9bef00d30
|
chore(template): 同步 GVSite 构建入口 hash
Viper 专题新增五语言排序对照后重新构建的入口 hash 同步。
|
2026-09-29 14:09:45 +08:00 |
|
TermiNexus
|
111c923a6f
|
chore(template): 同步 GVSite 构建入口 hash
GVSite 首页新增 Viper 专题区块、撤销独立页后重新构建的入口 hash 同步(assets 回到 59)。
|
2026-09-29 14:05:07 +08:00 |
|
TermiNexus
|
a8b6bb7964
|
chore(template): 同步 GVSite 构建入口 hash
GVSite 新增 Viper 语言专题页后重新构建的入口 hash 同步(assets 59 → 60)。
|
2026-09-29 14:01:45 +08:00 |
|
TermiNexus
|
05c2ad6c7d
|
chore(template): 同步 GVSite 构建入口 hash
GVSite 介绍文案更新后重新构建的入口 hash 同步。
|
2026-09-29 13:58:21 +08:00 |
|
TermiNexus
|
e5f898435e
|
chore(template): 同步 GVSite 构建入口 hash
GVSite 移除顶栏底边线后重新构建的入口 hash 同步。
|
2026-09-29 13:51:48 +08:00 |
|
TermiNexus
|
b91dfa464a
|
chore(template): 同步 GVSite 构建入口 hash
品牌幕布改为蓝底白字并居中后重新构建的入口 hash 同步。
|
2026-09-29 13:42:24 +08:00 |
|
TermiNexus
|
b55bdaa729
|
chore(template): 同步 GVSite 构建入口 hash
GVSite 本轮改动(翻牌老虎机翻页钟动效、footer 后品牌幕布)构建后的入口 hash 与 backup 快照一起同步。
|
2026-09-29 13:33:40 +08:00 |
|
TermiNexus
|
1d6826552c
|
perf(core): 构建产物静态资源改 72h 强缓存
- _serve_file 识别 Vite 内容 hash 文件名(-<hash>.<ext>,hash 段须含大写或数字)
- hash 产物: public, max-age=259200, immutable(72h,路径随版本变化不影响新版本生效)
- 非 hash 的传统资源保持 1h/24h,index.html 仍 no-cache
|
2026-09-29 11:32:35 +08:00 |
|
TermiNexus
|
068fcf4aec
|
feat(gerp): 授权审批限定公司/租户/平台管理员,并按其级别收窄数据范围
- 菜单 app-pending 加权限属性 admin:company(迁移 0047):公司管理员 + 租户管理员 + 平台管理员可见
- AppPendingView/AppApproveView 权限放宽到 IsCompanyAdminUser,按管理员级别解析可管辖公司
- ApproveUserApp 增加越权校验;返回值统一为三元组(失败原为 2 元组,视图解包会抛 ValueError)
- CheckAdmin 下发 is_company_admin 供前端判定
|
2026-09-28 18:23:13 +08:00 |
|
TermiNexus
|
04283d86ed
|
fix(core): 子域未命中时不再回退站点根 HTML,修复部署空窗期串台
- _resolve_file 原先在专属目录未命中时回退 TempLate/<path>,deploy 删除
index.html 的窗口期内 gerp.gvsds.com 会命中根目录 index.html(www/GVSite)
- 改为:专属目录已落盘时仅放行 assets/ 与 pages/ 共享前缀,其余不回退
- 目录未落盘的别名子域(nav/history)沿用旧回退,避免误伤
|
2026-09-28 18:03:13 +08:00 |
|
TermiNexus
|
fc5866f90c
|
refactor(gerp): 清理 dingcalc-finance 清单冗余空 LegacySrc
- 缺失与空串等价(app_manifests 用 \or ''\),删除后与其它清单保持一致
|
2026-09-28 17:53:51 +08:00 |
|
TermiNexus
|
d75db228ca
|
chore(gerp): product_order 补 models.py 说明纯清单应用
- 该应用无自有数据表,复用 gvsdsdk.order,转发层在 form_service.TABLES
- 为「每应用含 models」规约补齐形式一致性
|
2026-09-28 17:53:49 +08:00 |
|
TermiNexus
|
694d605cbc
|
chore(template): 同步 GVSite 构建入口 hash
GVSite deploy.ps1 步骤 1 会把 TempLate/index.html 复制进 backup/www/index.html,本次复跑后入口由 index-fDcrBwZt.js 前进为 4JBzxmTF.js,同步该 1 行变更。
|
2026-09-28 17:48:41 +08:00 |
|
TermiNexus
|
917ba29048
|
fix(talk): 修正成员搜索的 Manager 调用并把成员判定归一为 bytes
- SearchCompanyUsers 与 _IsCompanyUser 改用 RoleManager.GetCompanyUserUUIDs
(原误用 CompanyManager,该类没有此方法,成员搜索接口 500)
- _IsCompanyUser 统一转 bytes 后再比对(GetCompanyUserUUIDs 返回 UUIDObj 集合,
UUIDObj 与 bytes 的 hash 不同,原写法成员判定恒为 False,导致邀请成员必失败)
- 菜单链接由 pages/talk/index.html 改为 pages/talk.html
(前端 normalizeMenuPath 只去 pages/ 前缀与 .html 后缀,原写法规范化为 /talk/index 会 404)
|
2026-09-28 17:29:15 +08:00 |
|
TermiNexus
|
2ecbd4606a
|
chore(template): 同步 GVSite 构建产物入口
TempLate/index.html 与 backup/www/index.html 更新为新构建的入口 hash(含新增的两个计划页 chunk)
|
2026-09-27 12:01:49 +08:00 |
|
TermiNexus
|
265d7bc29a
|
refactor(gerp): 应用按子应用目录规约重组,清单外置并拆分路由
- 新增 gvsds/apps/gerp/apps/<appid>/:talk/mailbox/gitea/oa/ehrm/dingcalc_finance/
product_order/shop/store_value/wallet/enterprise,各应用自带 models/manager/views/urls
与 apps.gerp_manifests(JSON 清单,$schema 指向 apps/gerp_manifests.schema.json)
- 删除 app_manifests.py 内联 _LEGACY_MANIFESTS,改为扫描各应用清单文件(未知键/缺必填键即判非法并跳过)
- 路由按应用拆:/API/Mail/、/API/Gitea/、/API/Oa/ 由扁平直挂改为 include 子应用 urls.py
(reverse() 断言 19 个 name 的路径逐字不变)
- AppConfig 移至 gerp_app.py 并改显式点分路径注册,规避 apps/ 目录与 Django <app>.apps 同名冲突
- gerp/models.py 裁剪已搬迁模型(保留 _NewUuidBytes 与平台模型),修复 views/__init__.py 与 oidc.py 导入
- AssetDownloadView:优先按 FileAsset.StoragePath 定位并回退 ./resource 旧布局,修上传成功却下载 404
- 同批落地 Talk 应用后端(app 已迁入 apps/talk,gerp.0046 状态认领迁移)
- 注意:app.ini 被 .gitignore 忽略,INSTALLED_APPS 需在部署环境手工同步 gvsds.apps.gerp.gerp_app.GerpConfig
|
2026-09-26 23:46:00 +08:00 |
|
TermiNexus
|
e6c56e3a82
|
chore(tempLate): 同步 GVSite 最新构建产物(入口 hash 更新与备份滚动)
- TempLate/index.html 指向新产物 index-_HpjdiZK.js / index-BqAy3wb4.css(旧产物已随构建删除)
- backup/www/index.html 备份副本滚动到上一版入口 index-3r1fnTcU.js
- 源码改动见 GVSite 仓 5c08306
|
2026-09-15 14:17:19 +08:00 |
|
TermiNexus
|
2a5442ae6c
|
refactor(form_service): 写路径裸 ORM 收敛进 SDK Manager
- get_tables 表行数改用 SDK CachedTableCount(带 300 秒缓存)
- add_record:用户-角色规则拦截、URD 同步建关联委托 RoleManager
- modify_record:UserRole 查重(排除自身)、URD 同步委托 RoleManager
- delete_record:部门成员计数、batch_positions 5 个分支解析委托 RoleManager
- 净减约 80 行;get_table 三表 sha1 快照与改造前逐字节一致
|
2026-09-15 14:15:11 +08:00 |
|
TermiNexus
|
ddfc3fdde1
|
refactor(form_service): get_table 富化块裸 ORM 收敛进 SDK Manager
三处富化逻辑改调 SDK 批量方法:UserRoleWorkgroup/UserRoleDepartment 的 UserRole 反查与人名/角色名映射、UserRoleDepartment 的职务多值聚合、UserRole 的部门/职务虚拟列,分别改用 RoleManager.GetUserRolesByUUIDs / GetRoleNameMap / GetUserRoleDepartmentsForUserRoles、AuthManager.GetUserNames、PositionManager.GetUrdPositionRowsForUrds / GetPositionNameMap、DepartmentManager.GetDepartmentNameMap;员工详情页子表 UserUUID 过滤改用 RoleManager.ListUserRoleUUIDs。get_table 内已无裸 ORM(仅保留基础 model.objects.all())。
新增 _StrKeyMap 适配层:SDK 批量映射统一以 UUID 字节为键(避免 UUIDObj 与 bytes 的 hash 不等陷阱),本模块历史代码以字符串为键,此处显式转换。业务语义(标签列名、逗号聚合、覆盖名 RoleNameCover)完全留在 gvsds 侧。
等价性已用改造前快照校验:UserRole / UserRoleDepartment / UserRoleWorkgroup 三表 get_table 记录 sha1 与改造前逐字节一致(abc1f5820bcb5671 / 6344295216b39cfc / ac03fc8eacfe526a),员工详情页子表按 UserUUID 过滤与非法 UUID 空结果行为不变。
|
2026-09-15 13:34:28 +08:00 |
|
TermiNexus
|
62e5c3e508
|
refactor(form_service): 删除已下沉 SDK 的 entityPicker 两个方法
删除本地重复实现 _get_entity_picker_fields / _enrich_entity_labels(约 170 行),改由 FormServiceBase 继承:调用点更新为 _GetEntityPickerFields / _EnrichEntityLabels(get_table 的 entityPicker 分支),两处注释同步更名。
行为不变:仍按 ENTITY_PICKER_MAP/UUID_FIELD_ENTITY_MAP 识别字段,仍按 db_column 前缀回填 _label 与 extraFields。
|
2026-09-15 13:31:43 +08:00 |
|
TermiNexus
|
5f4a4b1cbb
|
refactor(form_service): get_table 查询链复用 SDK 公共辅助
精确字段过滤(含 UUID/FK 转字节)、关键字模糊过滤、分页参数解析、entityPicker 的 select_related、实例转 PascalCase 字典共 5 段重复实现改调 FormServiceBase 的 ApplyExactFilters/ApplyKeyword/ParsePagination/ApplySelectRelated/BuildRecords,get_table 净减约 60 行。
顺带:去掉 model.objects.all() 外层的 try/except(构造 QuerySet 不会抛错,异常实际发生在求值处,包裹只会掩盖问题);分页控制参数集合补入 pageSize;清理不再使用的 Q 与 _PascalizeRecord import。
|
2026-09-14 19:28:54 +08:00 |
|
TermiNexus
|
86ae8b739f
|
refactor(gerp): viewsets 方法内公司隔离查询收敛进 SDK Manager
DepartmentViewSet.search / WorkgroupViewSet.search / UserRoleViewSet.search 的「显式 CompanyUUID 强制收窄」与 FileAssetViewSet.get_queryset 的全量取数,分别改走 DepartmentManager / WorkgroupManager / RoleManager / AssetManager。
UserRoleViewSet.search 内的两处函数级 RoleManager import 上提至方法顶部,与新增的 DepartmentManager 合并为一行。
|
2026-09-14 16:01:54 +08:00 |
|
TermiNexus
|
893b9427a6
|
refactor(gerp): 清除最后 4 处跨 app 裸 ORM
mail/gitea 管理员列表的 CoreUser 批量取名改走 AuthManager.GetUserNames,同时省掉原先「先占位再回填」的两轮循环;viewsets 用户-角色搜索已与相邻的 RoleManager.GetRoleNameMap 用法对齐,一并统一。
asset.py 的公司归属校验改用 CompanyManager.BelongsToTenant,不再直接持有 Company ORM。
|
2026-09-14 15:46:52 +08:00 |
|
TermiNexus
|
eb44e8f300
|
refactor(gerp): 种子/清理命令裸 ORM 收敛进 SDK Manager
CleanAuditLogs 改用 AuditManager.QueryBefore/PurgeBefore;SeedPositions、SeedPositionCategories 改用 TenantManager.ListAllTenants 与 PositionManager 的 ListPositionCodes/CreatePosition/GetCategoriesForTenant/CreateCategory。
SeedPositionCategories 建通用部门时由「逐个 get 已存在编码」改为一次性取回按 CategoryCode 建索引,减少 N 次查询;顺带移除两处已失效的 import uuid。
|
2026-09-14 15:38:12 +08:00 |
|
TermiNexus
|
2495578ac8
|
refactor(gerp): OA/OIDC 裸 ORM 收敛进 Manager,修复管理员列表 UserName 恒为空
新增 OaManager(请假/出差通用审批查询,以 Model 为入参避免两表重复实现);oidc.py 的 3 处 CoreUser/UserGiteaAccount 查询改走 AuthManager.GetUserByUUID 与 GiteaManager.GetActiveAccount(新增 Status=1 版本);oa.py 视图不再直接持有 ORM。
修复真实缺陷:mail/gitea 管理员列表用 UUIDObj 作 dict 键、却用 UUID 字节回填与查询,两者 hash 不同(实测 d.get(bytes) -> None),导致 UserName 恒为空串;现统一以 UUID 字节为键。viewsets.py 同类逻辑本就以字节为键,无此问题。
顺带去掉 oa.py 中针对 CompanyUUID 的 try/except 兜底(两表均有该列,异常吞掉会掩盖真实字段问题)。
|
2026-09-14 15:27:19 +08:00 |
|
TermiNexus
|
a54808c9a2
|
fix(gerp): Gitea 视图裸 ORM 收敛进 GiteaManager,修复账号写入 UUID 为 NULL
views/gitea.py 的 11 处裸 ORM 全部改为委托 GiteaManager / MailManager(邮箱复用 MailManager.GetActiveMailbox,头像复用 GiteaManager.GetAvatar),视图层不再直接持有 ORM 查询。
修复真实缺陷:GiteaApplyView 落库时传 UserUUID=request.user(模型实例),自定义 UUIDField 的 get_prep_value 只认 UUIDObj/bytes/str/uuid.UUID,模型实例会被转成 NULL 并触发 NOT NULL 违约(1048),导致申请成功后写库必然失败;现统一传 UUID 字节。
顺带消除 UserGiteaAccount / UserMailbox / UserAvatar 三处隐式 import 与已失效的 import uuid。
|
2026-09-14 14:45:36 +08:00 |
|
TermiNexus
|
6602cb9997
|
refactor(gerp): 邮箱视图裸 ORM 收敛进 MailManager,修复 UUID 写入为 NULL
新增 MailManager(邮箱/联系人数访问层)与 GiteaManager(Gitea 账号数据访问层),views/mail.py 全部改为委托 Manager,不再直接持有 ORM 查询。
顺带修复真实缺陷:_AutoSaveContacts 与联系人 POST 把 request.user(模型实例)传给自定义 UUIDField,其 get_prep_value 只认 UUIDObj/bytes/str/uuid.UUID,模型实例会被转成 NULL 并触发 NOT NULL 违约(1048);邮箱申请写库同理。现统一先用 _UserUUIDBytes 取字节再落库。
同时消除 mail.py 中 UserMailbox/MailContact 的隐式依赖(原靠函数内 try-import 兜底,导入失败即静默跳过)。
|
2026-09-14 12:54:41 +08:00 |
|
TermiNexus
|
7c5f130b62
|
chore(git): 停止跟踪 TempLate/FTP 二进制分发目录
git rm --cached 移除 7 个已入库文件(LOVE.html/YELLOW*.zip/music_resourcepack.zip/skin*.png/title.html,本地文件保留),与 .gitignore 新增的 /TempLate/FTP/ 规则保持一致。
注:这些文件仍存在于历史提交中,索引减约 71MB;如需彻底瘦身需重写历史。
|
2026-09-14 12:37:46 +08:00 |
|
TermiNexus
|
91748c951d
|
chore(assets): 归档 TempLate/Olds 历史站点(Olds/2、Olds/3)
该目录由 core/views.py 的 SUBDOMAIN_CONFIG(old2/old3 子域)托管,随源码一并入库作为基线。
|
2026-09-14 12:30:11 +08:00 |
|
TermiNexus
|
3d00faa3cc
|
chore(baseline): 注册 RollCall/Viper/Venom 子域与站点,补 rollcall 应用
Main.py:WHITE_HOSTS 增 rollcall/viper/venom 主机,STATIC_SITES 增 rollcall/venom 静态根,静态站点路由下 /API/ 前缀请求转交 Django 处理。
gvsds:settings.py 注册 gvsds.apps.rollcall,urls.py 挂载 API/RollCall/;新增 rollcall 应用(模型/视图/路由/迁移 + RollCallManager 数据访问层)与 TempLate/rollcall 前端站点。
.gitignore:排除 Viper/Venom 前端工程与部署产物、TempLate/FTP 二进制分发目录。
|
2026-09-14 12:30:06 +08:00 |
|
TermiNexus
|
ba0678a722
|
refactor(core): 文档系列目录查询收敛进 DocManager
core/views.py 的 GetSerieDirectory 分支改用 DocManager.GetSerie / 新增的 ListDocumentsBySerie,移除视图内局部 import 与裸 ORM;doc/manager.py 新增 ListDocumentsBySerie(DocSerieUUID) 查询集方法。
注:core/views.py 同时携带此前工作区已有的 Viper/Venom 子域登记(SUBDOMAIN_CONFIG 两条),随本文件一并提交。
|
2026-09-14 06:47:38 +08:00 |
|
TermiNexus
|
d600315829
|
refactor(custom-apps): doc/invite/sve/community 视图裸 ORM 收敛进各 app Manager
doc:DocManager 新增 QueryDocuments/QuerySeries 返回查询集,视图 get_queryset 改为委托;invite:新增 InviteManager(QuerySet/GetByInviteID/Create);sve:新增 SveManager(QuerySet/GetByCandidates/Upsert 支持 CreateDefaults);community:新增 CommunityManager(板块/分类/帖子/回复/点赞共 20 处,ToggleLike 封装点赞切换与计数同步,聚合查询保留原 values_list+annotate)。
视图层不再直接操作 ORM,类级 queryset 属性保留(DRF 必需);QueryPosts 收 Filters 字典以保持原边界行为。
|
2026-09-14 06:47:01 +08:00 |
|
TermiNexus
|
c26286af1a
|
feat(db): 补齐 commission/stats 缺失的初始迁移并建表
这两个 app 此前没有任何迁移文件,新环境 migrate 不会建表。本次用 Django 自带 autodetector 生成初始迁移(项目全局存在「迁移状态字段名 snake_case / 模型 PascalCase」漂移,makemigrations 在检测阶段即报错,故按 app 单独生成)。
同时把 StatRecord/StatRanking 的 unique_together 去掉 JSON 列(MySQL 不支持 JSON 列索引,否则建表报 3152),去重由 StatsManager 的 select_for_update 在应用层保证。schema 校验差异 51 → 2。
|
2026-09-13 22:24:04 +08:00 |
|
TermiNexus
|
163903c946
|
fix(gerp): 对齐遗留库列名并清理 Asset 表 Flask 期遗留文件列
models.py:CompanyInfo 三个身份证列与 PersonalPage.QQ 补 db_column,匹配库中 *IdCard / Qq 实际列名;新增 0044 仅状态迁移(SeparateDatabaseAndState,零 DDL)记录该对齐。
新增 0045:条件删除 Asset 表 8 个 Flask 期文件资产列(FileName/FileSHA1/FileSize/MimeType/StoragePath/UploaderUUID/RefCount/CreateTime)。这些列 NOT NULL 且无默认值,导致新增企业资产必然报 1364;删除前先解除 UploaderUUID 上的遗留外键 asset_ibfk_1。按 information_schema 判定存在性,幂等可重入。
|
2026-09-13 22:16:53 +08:00 |
|
TermiNexus
|
7ad151bf74
|
refactor(orm): 手写 ORM 下沉 gvsdsdk Manager,通用工具改为 SDK 转发
P1 通用查询:viewsets / app / menu / mail / gitea / mc / stats / sync_apps 等视图与命令的裸查询改委托 SDK Manager(Role/Company/Department/Position/Menu/Tenant/App)。
P2 App 体系:app_manager.py 与 app_manifests.py 实现零裸 ORM,职务多值/虚拟职务/公司下拉全部走 SDK。
P3 工具下沉:money/json_encoder/celery_utils/exception_handler/redis_lock 改为纯转发展开;ip_filter/storage 转发并注入 app.ini 配置源;common 下 DateTime/String/Naming/UUID 转发 SDK。
删除死代码 commission/strategies/engine.py(SDK 已有同物且零引用)与 payment/models.py 的 FromTenantAndPlatform;单测 patch 目标同步为 gvsdsdk.*,test_attack_detect fixture 补齐限频去重状态。
|
2026-09-13 21:58:06 +08:00 |
|
TermiNexus
|
2505c8279f
|
refactor(gerp): 职务系统委托 gvsdsdk——模型改 import + form_service/viewsets/app_manager 落库下沉
- models.py:删除 UserRoleDepartmentPosition/AppVirtualPosition/AppVirtualBinding 本地定义,
改从 gvsdsdk.models import(SDK 统一提供,db_table 同库映射)
- form_service:_ResolvePrimaryUrd/_WritePositionsToPrimaryUrd 委托 ResolvePrimaryUrd/
WritePositionsToPrimaryUrd;batch_positions 落库委托 BatchAdd/BatchRemovePositions
(bytes 归一化查重防 1062);add_record/modify_record 职务写入委托
AddPositionToUrd/SetUrdPositions;delete_record 级联清理委托 ClearUrdPositions
(隔离/审计/拦截业务逻辑保留 gvsds 侧)
- viewsets:PositionViewSet.search/PositionCategoryViewSet.search 数据查询与树组装
委托 SearchPositions/SearchCategories(保留租户判定上下文与公司绑定分类优先排序)
- app_manager:GetVirtualMapping/SetVirtualMapping/AutoBindVirtualPositions 委托 SDK
(应用存在性/租户判定保留)
- 附:应用可见性/菜单/OA 系列(app_access/menu/oa 视图、ugm 公司管理委托、migrations 0033-0043、
SeedPositions/SeedPositionCategories 命令)
|
2026-08-30 13:22:44 +08:00 |
|
TermiNexus
|
dfefd0d70b
|
docs(arch): 同步UserRole/角色作用域数据模型描述(关联表为准)
UserRole遗留字段(DeptUUID/WorkgroupUUID/RoleType)已删除,部门/工作组归属与成员类型全走关联表
|
2026-08-28 15:34:36 +08:00 |
|
TermiNexus
|
c47b12bea1
|
fix(gerp): role_scope负责人/组长判定改读关联表RoleType,支持多部门作用域与公司过滤
- 移除UserRole遗留字段(RoleType/DeptUUID/WorkgroupUUID)相关隐藏与防写入规则
- 同步UserRole/UserRoleDepartment列展示优化
|
2026-08-28 15:34:28 +08:00 |
|
TermiNexus
|
90ae4d4115
|
fix(auth): Tenant 表数据仅租户管理员可读(兜底)
- form_service.get_table 对 Tenant 表:非管理员(admin:super/tenant)返回空,防止普通角色绕过前端直调接口查看租户详情
|
2026-08-25 09:55:58 +08:00 |
|
TermiNexus
|
bbf98d4755
|
refactor(asset): 公司资产菜单权限改由 Menu 表数据驱动
- 移除 '公司资产' 菜单代码硬编码特例
- 该菜单 PermAttr 已在 Menu 表配置为 admin:company:租户管理员(IsAdmin 放行)/公司管理员(RBAC admin:company)可见,普通角色隐藏
|
2026-08-25 09:22:14 +08:00 |
|
TermiNexus
|
f20db14ec7
|
feat(asset): 公司资产权限收敛——仅管理员可见
- 菜单:'公司资产'目录仅 IsCompanyAdmin(admin:company/tenant/super)可见,普通用户隐藏
- 数据范围:FileAssetViewSet 按角色——admin:super 全部 / admin:tenant 本租户所有公司 / admin:company 本公司 / 其他 403
- 上传:Init 管理员校验;Complete/SimpleUpload 归属公司强制解析(租户管理员可指定本租户公司,公司管理员仅本公司)
|
2026-08-25 09:01:38 +08:00 |
|
TermiNexus
|
0230eb3319
|
fix(oidc): userinfo 解码关闭 verify_aud,修复 Gitea SSO 401
- pyjwt>=2.13 在 decode 未传 audience 时,payload 含 aud 必抛 InvalidAudienceError
- /oidc/userinfo 改用 options={'verify_aud': False},aud 归属仍由 _ClientIds() 手动校验,安全等价
|
2026-08-25 08:35:24 +08:00 |
|