*/ public function permissionsForUser(?User $user): array { if (! $user) { return []; } $position = $user->activePosition?->position; if (! $position) { return []; } return array_values(array_intersect( PositionPermissionRegistry::codes(), $position->permissions ?? [], )); } /** * 返回当前用户全部权限的布尔映射表。 * * @return array */ public function permissionMapForUser(?User $user): array { $permissionMap = array_fill_keys(PositionPermissionRegistry::codes(), false); foreach ($this->permissionsForUser($user) as $permission) { $permissionMap[$permission] = true; } return $permissionMap; } /** * 判断用户是否拥有指定权限码。 */ public function hasPermission(?User $user, string $permission): bool { if (! in_array($permission, PositionPermissionRegistry::codes(), true)) { return false; } return in_array($permission, $this->permissionsForUser($user), true); } /** * 判断用户是否至少拥有一项指定权限。 * * @param list $permissions */ public function hasAnyPermission(?User $user, array $permissions): bool { foreach ($permissions as $permission) { if ($this->hasPermission($user, $permission)) { return true; } } return false; } }