TermiNexus
|
b35e036b51
|
refactor(ResolveRoleContext): 日志改为输出用户名、角色名与租户-公司名,去掉 UUID 噪声
|
2026-10-24 23:09:58 +08:00 |
|
TermiNexus
|
d057c56c26
|
fix(auth): 密码校验改走 User 登录密码(审计表明文导致恒判失败)
- AdminUserManager.VerifyPassword 原查 Password 明文审计表并用 bcrypt 比对:必然抛 ValueError 被吞成 False,恒判「密码不匹配」
- 改为与登录同源:AuthManager.GetUserByUUID(...).CheckPassword(...),保证「登录能过 = 校验能过」
- ResetPassword 一并修:原来只写审计表、不更新 User.UserPassword,导致「重置成功」但登录密码未变;现两处同写
- 移除因此不再使用的 crypto.VerifyPassword 导入
|
2026-10-02 16:37:52 +08:00 |
|
TermiNexus
|
9fd38f3c8e
|
fix(auth): VerifyPassword 形参遮蔽 Password 模型导致 AttributeError
- AdminUserManager.VerifyPassword 的形参名为 Password,遮蔽了模块级导入的 Password 模型
- 导致 Password.objects 变成对 str 取属性:AttributeError: 'str' object has no attribute 'objects'
- 影响面:/API/Ehrm/UnlockIdCard、/API/SiteUserManagement/VerifyPassword、2FA 设置/禁用(均走 AuthManager.VerifyUserPassword)
- 修法:形参改名 PlainPassword,模型 Password 恢复可见
|
2026-10-02 16:31:52 +08:00 |
|
TermiNexus
|
ad1156f5d9
|
feat(role): 新增按公司查询部门-员工关系 QueryUserRoleDepartmentsByCompany
供「部门-员工」选择器(员工档案直接绑部门-员工关系)使用:CompanyUUID 缺失或非法返回空集(不退化成全表查询),可选按 DeptUUIDs 进一步收窄。
|
2026-09-30 10:39:22 +08:00 |
|
TermiNexus
|
94cb71e82a
|
feat(auth): 新增 IsCompanyAdminUser 权限类并修复待审列表跨租户泄漏
- permissions.py 新增 IsCompanyAdminUser(admin:company / admin:tenant / admin:super)
- ListPendingApplications 移除被静默忽略的 TenantUUID 形参,改为显式 AllowedCompanyUUIDs
- 过滤在 SQL 侧用子查询完成,规避 UUIDObj 与 bytes 混比恒为 False 的坑
|
2026-09-28 18:23:08 +08:00 |
|
TermiNexus
|
b0bf51350d
|
feat(sdk): 表计数缓存提升为公共方法,补用户-角色归属的 upsert 与批量查询原语
- FormServiceBase.CachedTableCount:表行数带缓存计数(TTL 300 秒),GetTables 复用
- RoleManager 新增:GetUserRoleByUUID / GetUserRoleDepartmentForCompany / UserRoleRelationExists(支持排除自身)
- RoleManager 新增:EnsureUserRoleDepartment(支持 MatchCompany)/ HasUserRoleDepartment / HasUserRoleWorkgroup
- RoleManager 新增:GetUserRoleDepartmentsByUUIDs / ByDeptUUIDs、GetUserRoleWorkgroupsByUUIDs / ByWorkgroupUUIDs
|
2026-09-15 14:15:06 +08:00 |
|
TermiNexus
|
8a12707616
|
feat(sdk): 补用户-角色/URD 职务/职务名/部门名的批量查询方法
RoleManager.GetUserRolesByUUIDs:批量取 UserRole 行;PositionManager.GetUrdPositionRowsForUrds:一次取多个 URD 的职务子表行;PositionManager.GetPositionNameMap 与 DepartmentManager.GetDepartmentNameMap:批量 UUID→名称映射(字节键,避免 UUIDObj/bytes hash 不等)。
均为列表页批量富化所需的低层原语,供子项目替代逐个 filter 与手写映射循环。
|
2026-09-15 13:34:23 +08:00 |
|
TermiNexus
|
2cf5179803
|
feat(sdk): 补部门/工作组/用户角色/文件资产的公司维度查询方法
DepartmentManager.QueryAll / QueryByCompany、RoleManager.QueryUserRolesByCompany、新增 WorkgroupManager.QueryByCompany、AssetManager.QueryAll:供视图层在「显式指定公司」时收窄数据范围,替代直接持有各模型 ORM。
QueryByCompany 统一约定「CompanyUUID 缺失或非法返回空集」,避免退化成全表查询(原视图层为 try/except 包裹 uuid.UUID 转换)。
|
2026-09-14 16:01:48 +08:00 |
|
TermiNexus
|
f7ea30dba3
|
feat(sdk): AuthManager 补 GetUserNames,CompanyManager 补 BelongsToTenant
GetUserNames:单次 __in 批量取用户名 {UUID字节: UserName},供列表页回填,替代调用方逐个查库造成 N+1。
BelongsToTenant:判断公司是否归属指定租户,替代视图层直接持有 Company ORM 做归属校验。
|
2026-09-14 15:46:46 +08:00 |
|
TermiNexus
|
13e800f473
|
feat(sdk): TenantManager 补 ListAllTenants,AuditManager 补日志查询与清理
ListAllTenants:供种子/运维命令遍历全部租户(不分状态),替代命令层直接 Tenant.objects.all()。
AuditManager.QueryBefore / PurgeBefore:清理任务所需的按时间阈值查询与删除,替代命令层直接持有 AuditLog ORM。
|
2026-09-14 15:38:07 +08:00 |
|
TermiNexus
|
9be878b84a
|
feat(sdk): 通用查询与工具层下沉,新增 App 体系镜像模型
P1 通用查询:auth/managers.py 新增 20 个查询方法(Role/Company/Department/Position/Menu/Tenant 六个 Manager);auth/ram.py 新增 RAMManager.ListPolicyResourceUUIDs;stats/manager.py 新增 StatsManager.ListAutoResetConfigs。
P2 App 体系:models.py 新增 App/TenantApp/CompanyApp/UserApp/AppConfig 五个 managed=False 镜像模型,字段与业务侧逐一对齐。
P3 工具下沉:新增 config.py 配置注入层与 money/json_encoder/celery_utils/exception_handler/redis_lock/ip_filter/storage/datetime_utils/string_utils 九个工具模块;model_utils.UUIDObj 增加 PascalCase 别名 Str/Bytes/UUID 与模块级转换函数。
同时移除 commission/stats/CashBook 镜像模型的重复索引声明,消除 Django models.E030。
|
2026-09-13 21:57:45 +08:00 |
|
TermiNexus
|
3776b96a55
|
feat(sdk): 职务系统下沉——新增职务多值子表/应用虚拟职务模型 + PositionManager 扩展
- 模型下沉 gvsdsdk.models(db_table 同库映射,managed=False):
UserRoleDepartmentPosition(职务多值子表,URD 身兼数职)
AppVirtualPosition / AppVirtualBinding(应用虚拟职务及与真实职务绑定)
- PositionManager 新增:
通用部门分类管理 CreateCategory/GetCategoriesForTenant/UpdateCategory/DeleteCategory/SearchCategories
多值职务 CRUD GetUrdPositionRows/GetUrdPositionUUIDs/HasUrdPosition/AddPositionToUrd/
RemovePositionFromUrd/ClearUrdPositions/SetUrdPositions
主部门关联 ResolvePrimaryUrd/WritePositionsToPrimaryUrd
批量 BatchAddPositions/BatchRemovePositions(bytes 归一化查重防联合唯一 1062)
搜索树 SearchPositions(租户职务 + 通用部门树,公司绑定分类优先排序)
虚拟绑定 GetVirtualBindings/SetVirtualBindings/AutoBindVirtualPositions(按名称一键绑定)
- __init__.py 懒加载导出新增 3 模型
|
2026-08-30 13:08:10 +08:00 |
|
TermiNexus
|
5ad8062388
|
feat(auth): 新增GetUserRoleDepartments/GetUserRoleWorkgroups多关联查询方法
支持按CompanyUUID/RoleType过滤,负责人判定以关联表为准
|
2026-08-28 15:34:21 +08:00 |
|
TermiNexus
|
e2cafd5fcd
|
feat(ram): RAM 资源访问管理——RAMGrant 模型 + RAMManager 服务层(GrantAccess/CheckAccess/Revoke/List)
|
2026-08-13 23:55:53 +08:00 |
|
TermiNexus
|
66cb2da387
|
refactor(auth): 角色上下文解析合并为唯一实现
- 新增模块级 ResolveRoleContext(request, user=None):兼容显式 user 与 request.user 两条链路
- CurrentRoleMiddleware 委托调用 ResolveRoleContext,消除与 gvsds/auth.py 的重复实现
- __init__.py 惰性导出 ResolveRoleContext
|
2026-08-13 17:40:12 +08:00 |
|
TermiNexus
|
9851f41f34
|
feat(auth): 新增公司管理员权限键 admin:company——IsCompanyAdmin 判定(admin:tenant/admin:super 自动继承,普通角色手动授予后按公司维度生效)
|
2026-08-13 05:54:50 +08:00 |
|
TermiNexus
|
62ab9df6c5
|
chore: 新增 .gitignore 并解除 __pycache__ pyc 文件跟踪
补充 Python 标准忽略规则(__pycache__/*.pyc 等),移除历史
误跟踪的 56 个编译产物。
|
2026-08-10 23:11:21 +08:00 |
|
TermiNexus
|
c043f1f31c
|
feat(sdk): 新增物品背包/文件资产/密码审计服务层
InventoryManager 统一物品模板与背包 CRUD,AssetManager 提供 SHA1 去重与引用计数,AuthManager.ChangePasswordAudit 同步维护明文审计表;新增 ItemReference/Backpack/FileAsset 模型映射。
|
2026-08-07 19:39:31 +08:00 |
|
TermiNexus
|
277b2f3043
|
"feat(sdk): 新增审计/默认角色/作用域与用户级联能力
RoleManager 补齐 EnsureDefaultRoleForUser/EnsureTenantAdminRole/
GetUserRoleRelation/GetScopeMembers,新增 AdminUserManager.DeleteUser、
AuditManager、StatsManager 列表方法;新增 AuditLog/UserRoleWorkgroup 模型。"
|
2026-08-07 18:12:02 +08:00 |
|
TermiNexus
|
dc4aa44562
|
"feat(sdk): 新增菜单与工单服务层
Menu/WorkOrder 模型迁入 gvsdsdk;MenuManager 提供菜单树/管理列表/保存/递归删除,
WorkOrderManager 提供统计/个人工单/创建/更新,顶层懒加载导出。"
|
2026-08-07 17:17:55 +08:00 |
|
TermiNexus
|
fb1dec743f
|
"feat(auth): 新增公司/部门模型映射与管理器
- 新增 Company/Department/UserRoleDepartment 模型映射
- CompanyManager: GetCompanyByUUID/GetCompaniesForUser
- DepartmentManager: GetDepartmentByUUID/GetDepartmentsForUser"
|
2026-08-07 15:57:30 +08:00 |
|
TermiNexus
|
e7d03d339f
|
"feat(auth): add TenantManager, 2FA/email flows, permission checks
- TenantManager: ApplyTenant/ListPendingTenants/ApproveTenant/RejectTenant
- Tenant model mapping
- AuthManager: Setup2FA/GetPending2FA/Disable2FA/VerifyUserPassword/
SendAccountActivationCode/VerifyAccountActivationCode/ChangeUserEmail
- RoleManager: HasUserPermission/CheckTablePermission/GetPermissionByCode"
|
2026-08-07 04:40:43 +08:00 |
|
TermiNexus
|
d2de2301a4
|
"feat: add RoleManager tree/search, OrderManager.CreateGeneric, StatsManager
- RoleManager: GetPermissionsTree / MatchUserRoleIds
- OrderManager.CreateGeneric: auto order-no, forced PENDING, transactional
- gvsdsdk.stats: StatsManager (8 methods) + 5 model mappings (app_label=gvsdsdk)"
|
2026-08-07 04:08:10 +08:00 |
|
TermiNexus
|
0ad5ce77c8
|
"feat(auth): add RoleManager.CreatePermission
- create permission with tenant-scoped code uniqueness check
- returns (instance, created); existing code returns (None, False)"
|
2026-08-07 03:18:54 +08:00 |
|
TermiNexus
|
a006d577c8
|
"feat(auth): add ShopManager/AuthManager/AdminUserManager/UserService & SaveRolePermissions
- ShopManager: shop CRUD + role-shop associations (fixes dangling ShopManager export)
- AuthManager: user lookup/create/password/2FA/avatar
- AdminUserManager: user search/reset-password/license/email/2FA info
- UserService.GetUserDetail: aggregate user+roles+permissions+orders
- RoleManager.SaveRolePermissions: atomic incremental role-permission sync
- remove gvsdsdk.minecraft (MC is custom business, moved to gvsds)"
|
2026-08-07 03:12:18 +08:00 |
|
TermiNexus
|
f6842ee3c8
|
"feat(managers): extend commission/payment/position managers
- CommissionEngine: ListRules/DisableRule/ListRateTables/ListEvents
- PaymentManager: ListConfigs/GetConfigByUUID/DisableConfig/SetConfigStatus/DeleteConfig
- PositionManager: HasTemplatePerm"
|
2026-08-07 02:26:19 +08:00 |
|
TermiNexus
|
e9bde4db76
|
"chore(gvsdsdk): 清理过时点与死代码并修复运行期缺陷
- models: 修正过时文档、UserRole 遗留字段标注废弃、抽象 User 补 IsStaff/IsSuperuser
- models: CopyToRole 补 CompanyUUID 默认值,修复 RolePermission 插入必失败缺陷
- form_service: 对齐主项目值转换(Boolean/时区/空值),移除 NullBooleanField 遗留映射
- auth: 删除无引用的 GetDefaultAvatar 与 ShopManager/PositionManager,清理惰性导出
- db_router/model_base/msync: 简化模块集合、移除 typing_extensions 死兜底、复用 GenerateChallenge
- 删除残留文件(空测试文件、无源 pyc)"
|
2026-08-07 00:57:29 +08:00 |
|
TermiNexus
|
d933b90064
|
初次重新上传维护
|
2026-08-02 19:45:22 +08:00 |
|