\App\Services\AdminConfigPostService

岗位服务

职责:岗位是数据权限体系的独立实体——唯一归属一个部门(td_sys_post.dept_id)、 配置数据范围(td_sys_post_scope)。岗位只管数据、不管功能, 菜单/权限归属角色(td_sys_role_menu / td_sys_role_permission)。 岗位删除级联清理数据范围与孤儿任职;部门岗位目录(depts/{dept}/posts)在此聚合读取。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 构造与依赖 __construct 分区 2 · 岗位查询(读) paginate / deptPosts / getScopeRules 分区 3 · 岗位写操作 create / update / destroy 分区 4 · 数据范围同步 syncScopeRules 分区 5 · 内部辅助 withUserCounts └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
__construct()
paginate()
deptPosts()
getScopeRules()
create()
update()
destroy()
syncScopeRules()
No public properties found
No constants found
normalizeStringColumns()
assertAnchorNotCreatable()
assertNotBecomingAnchor()
assertAnchorLocked()
assertAnchorNotDeletable()
No protected properties found
N/A
withUserCounts()
$cacheService
N/A

Properties

Methods

__construct()

__construct(\App\Services\Admin\PermissionCacheService  $cacheService) : mixed

注入权限缓存服务

Parameters

\App\Services\Admin\PermissionCacheService $cacheService

Returns

mixed —

paginate()

paginate(array  $filters, int  $perPage = 15) : mixed

岗位分页(search/status 过滤;company_id 过滤 = 该组织下部门的岗位; dept_id 过滤 = 该部门及其全部子部门(子树,ancestors 前缀)的岗位—— 岗位配置页树形组织选择到部门级用;两参数互斥不叠加)。

Parameters

array $filters
int $perPage

Returns

mixed —

deptPosts()

deptPosts(\App\Models\SysDept  $dept) : array<int,array<string,mixed>>

部门岗位目录(组织维护页岗位清单):子树聚合—— 返回该部门及其全部子孙部门的岗位(ancestors 前缀匹配,与岗位配置页 dept_id 筛选同语义), 选中部门即看整棵子树的人;岗位新增/编辑的归属仍精确到岗位自身部门。

Parameters

\App\Models\SysDept $dept

选中部门(聚合其子树)

Returns

array> —

getScopeRules()

getScopeRules(\App\Models\SysPost  $post) : \App\Models\SysPostScope[]

岗位数据范围规则列表(覆盖式同步后回读用)。

Parameters

\App\Models\SysPost $post

Returns

\App\Models\SysPostScope[] —

create()

create(array  $data) : \App\Models\SysPost

创建岗位(body 含 dept_id,岗位唯一归属一个部门,创建即挂部门)。

Parameters

array $data

Returns

\App\Models\SysPost —

update()

update(\App\Models\SysPost  $post, array  $data) : \App\Models\SysPost

更新岗位(dept_id 可选:提交即改岗位归属部门,原部门/新部门岗位目录缓存同步失效)。

Parameters

\App\Models\SysPost $post
array $data

Returns

\App\Models\SysPost —

destroy()

destroy(\App\Models\SysPost  $post) : void

删除岗位:级联清理 数据范围/孤儿任职。 内置超级管理员岗位(code=super)是数据全见的根基,不允许删除。

Parameters

\App\Models\SysPost $post

syncScopeRules()

syncScopeRules(\App\Models\SysPost  $post, array  $items) : void

同步岗位数据范围(覆盖式)。

规则模式(SysPostScope): MODE_ORG(0) 显式组织——company_id 必填,dept_id 恒 0; MODE_DEPT(1) 显式末级部门——company_id + dept_id 必填,部门必须属于该组织且为叶子(末级)节点。 同一岗位可同时配置多条(并集生效)。

Parameters

\App\Models\SysPost $post
array $items

范围规则 [{scope_mode, company_id, dept_id}]

Throws

\InvalidArgumentException

模式取值无效、组织/部门不存在或归属不符时抛 400

normalizeStringColumns()

normalizeStringColumns(array<string,mixed>  $data, string[]  $columns, array<string,string>  $defaults = [], bool  $fillMissing = false) : array

字符串列归一化:值为 null 的键写入 $defaults 对应默认值(缺省 '')。

Parameters

array $data

待写库数据(按引用字段处理,返回归一化副本)

string[] $columns

参与归一化的列名

array $defaults

列 => 默认值(缺省 '',如 link_target => '_self')

bool $fillMissing

true 时缺失键也补默认值(创建路径全字段落库用);false 只处理已存在的键

Returns

array —

assertAnchorNotCreatable()

assertAnchorNotCreatable(array  $data, string  $anchorCode) : void

创建路径:伪造锚点编码一律 403

Parameters

array $data
string $anchorCode

assertNotBecomingAnchor()

assertNotBecomingAnchor(array  $data, string  $rowCode, string  $anchorCode) : void

更新路径:普通行不得改成锚点编码

Parameters

array $data
string $rowCode
string $anchorCode

assertAnchorLocked()

assertAnchorLocked(array  $data, string  $rowCode, string  $anchorCode, string  $label, array  $locked) : void

更新路径:锚点行锁定字段校验——code 不得改走,锁定字段不得偏离锚点值。

Parameters

array $data
string $rowCode
string $anchorCode
string $label

锚点实体名(消息用,如「超管角色」「超级管理员岗位」)

array $locked

assertAnchorNotDeletable()

assertAnchorNotDeletable(string  $rowCode, string  $anchorCode, string  $label) : void

删除路径:锚点行禁删

Parameters

string $rowCode
string $anchorCode
string $label

withUserCounts()

withUserCounts(\Illuminate\Support\Collection<int,\App\Models\SysPost>  $posts) : \Illuminate\Support\Collection<int,array<string,mixed>>

批量附任职人数(td_sys_user_dept 按 post_id 去重统计;0=无人任职)。

Parameters

\Illuminate\Support\Collection $posts

Returns

\Illuminate\Support\Collection> —