isSuper()
isSuper(?\App\Models\SysUser $user) : bool
操作者是否为超级管理员(auth('api') 当前用户),角色/用户服务共用
Parameters
| ?\App\Models\SysUser | $user |
数据范围过滤(公用静态算法)
职责:数据可见性由「岗位范围 ∪ 个人范围 ∪ 负责人部门」决定—— 豁免(is_super 或任一启用角色 is_exempt=1,或任职超级管理员岗位 code=super)→ 全见; 可见部门集 = 任职岗位范围行展开(仅启用岗位)∪ 个人范围行展开 ∪ is_leader=1 的任职部门子树; 停用部门从范围剔除,组织/部门变更自动失效 user_scope 缓存。 任职(user_dept)本身不再自动赋予数据可见性(分配部门仅归属), 可见性完全由岗位范围与个人范围决定。
┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 豁免判定 isSuper / isExempt 分区 2 · 可见范围计算 visibleDeptIds / orgUserIds / deptIdsForMemberships / deptIdsForUserScopes 分区 3 · 查询过滤 apply 分区 4 · 内部展开与过滤 computeOrgUserIds / expandMembershipDeptIds / expandUserScopeDeptIds expandUserScopeItems / expandScopeRows / expandCompanyDeptIds / activeDeptIds └────────────────────────────────────────────────────────────┘
deptIdsForMemberships(\App\Models\SysUser $user, array $items) : int[]
按给定任职项(已通过校验的提交 items)计算可见部门集。 用于"调整任职不得扩大自身数据范围"的前置校验(UserConfigService::syncMemberships), 与 visibleDeptIds 语义一致(activeDeptIds 过滤停用),不缓存。 比对部门集而非用户集:加一个无人任职的部门用户集不变、但部门集扩大—— 业务数据按部门集过滤,只有部门集 diff 才能真正防"借任职自扩数据范围"。
| \App\Models\SysUser | $user | |
| array | $items | 任职项 [{dept_id, post_id, is_leader, ...}] |
deptIdsForUserScopes(\App\Models\SysUser $user, array $items) : int[]
按给定个人范围项(已通过校验的提交 items)计算可见部门集。 用于"调整个人范围不得扩大自身数据范围"的前置校验(UserConfigService::syncUserScopes), 与 deptIdsForMemberships 同规:比对部门集而非用户集。
| \App\Models\SysUser | $user | |
| array | $items | 个人范围项 [{company_id, dept_id}] |
apply(\Illuminate\Database\Eloquent\Builder $query, \App\Models\SysUser|null $currentUser, string $ownerColumn = 'id') : void
为查询追加数据范围过滤(组织轴)。
| \Illuminate\Database\Eloquent\Builder | $query | |
| \App\Models\SysUser|null | $currentUser | 当前登录用户 |
| string | $ownerColumn | 数据归属人字段(用户表为 id,业务表一般为 user_id) |