\App\Services\AdminConfigRoleService

用户角色服务

职责:角色仅承载用户直授(kind=2,岗位已独立建表)。负责角色 CRUD、菜单/权限分配, 以及 super 锚点的锁删锁改保护、is_exempt 数据豁免角色的提权拦截。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 构造与依赖 __construct 分区 2 · 查询(读) paginate / getMenuIds / getPermissionIds 分区 3 · 角色写操作 create / update / destroy 分区 4 · 分配与编排 createWithAssignments / updateWithAssignments syncMenus / syncPermissions └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
__construct()
paginate()
getMenuIds()
getPermissionIds()
create()
update()
destroy()
createWithAssignments()
updateWithAssignments()
syncMenus()
syncPermissions()
No public properties found
No constants found
normalizeStringColumns()
assertAnchorNotCreatable()
assertNotBecomingAnchor()
assertAnchorLocked()
assertAnchorNotDeletable()
No protected properties found
N/A
No private methods found
$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) : \Illuminate\Contracts\Pagination\LengthAwarePaginator

分页查询角色列表,支持名称/编码搜索与状态筛选,按 sort 倒序、id 升序。

Parameters

array $filters
int $perPage

Returns

\Illuminate\Contracts\Pagination\LengthAwarePaginator —

getMenuIds()

getMenuIds(\App\Models\SysRole  $role) : array

获取角色已分配的菜单 ID 列表。

Parameters

\App\Models\SysRole $role

Returns

array —

getPermissionIds()

getPermissionIds(\App\Models\SysRole  $role) : array

获取角色已分配的权限 ID 列表。

Parameters

\App\Models\SysRole $role

Returns

array —

create()

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

创建角色

流程:① 固定 kind=用户角色(岗位已独立) ② 锚点防伪:不得伪造 super 编码 ③ is_exempt 提权拦截:仅超管可创建豁免角色 ④ forceFill 落库(kind/is_exempt 不在 fillable,服务层唯一写路径)

Parameters

array $data

Returns

\App\Models\SysRole —

update()

update(\App\Models\SysRole  $role, array  $data) : \App\Models\SysRole

更新角色

流程:① 锚点防伪:普通角色不得改为 super ② 超管角色锚点锁改(code/status/is_exempt 锁定) ③ is_exempt 提权拦截(非超管不得 0→1) ④ remark 空值归一化 ⑤ forceFill 落库 ⑥ 清该角色用户权限缓存

Parameters

\App\Models\SysRole $role
array $data

Returns

\App\Models\SysRole —

destroy()

destroy(\App\Models\SysRole  $role) : void

删除角色

流程:① 锚点禁删:超管角色是系统根基,不允许删除 ② 记录直授用户(清理缓存用) ③ 事务内清理菜单/权限/直授用户关联并删除 ④ 提交后清该角色下所有用户的权限缓存

Parameters

\App\Models\SysRole $role

createWithAssignments()

createWithAssignments(array  $data, int[]|null  $menuIds = null, int[]|null  $permissionIds = null) : \App\Models\SysRole

创建角色并同步菜单/权限分配(提交 menu_ids/permission_ids 时)。

Parameters

array $data
int[]|null $menuIds

null=本次未提交分配(不触碰)

int[]|null $permissionIds

null=本次未提交分配(不触碰)

Returns

\App\Models\SysRole —

updateWithAssignments()

updateWithAssignments(\App\Models\SysRole  $role, array  $data, int[]|null  $menuIds = null, int[]|null  $permissionIds = null) : \App\Models\SysRole

更新角色并同步菜单/权限分配(语义同 createWithAssignments)。

Parameters

\App\Models\SysRole $role
array $data
int[]|null $menuIds

null=本次未提交分配(不触碰)

int[]|null $permissionIds

null=本次未提交分配(不触碰)

Returns

\App\Models\SysRole —

syncMenus()

syncMenus(\App\Models\SysRole  $role, array  $menuIds) : void

同步角色的菜单。

Parameters

\App\Models\SysRole $role
array $menuIds

syncPermissions()

syncPermissions(\App\Models\SysRole  $role, array  $permissionIds) : void

同步角色的权限。

Parameters

\App\Models\SysRole $role
array $permissionIds

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