I found (and fixed) the problem.
The PersonaBarMenuPermissions table only had 14 rows. I couldn't do a direct import from another database because the roleIds did not line up.
Here's the query I wrote to fix the problem which uses a clean DNN 9.2 install as a template to determine which permissions are missing.
insert into BrokenDNNSite.dbo.PersonaBarMenuPermission
(
PortalId
,MenuId
,PermissionId
,AllowAccess
,RoleID
,UserId
,CreatedByUserId
,CreatedOnDate
,LastModifiedByUserID
,LastModifiedOnDate
)
Select
0 PortalId
,pbm.MenuId
,pbp.PermissionId
,1 AllowAccess
,r.RoleID
,NULL UserId
,1 CreatedByUserId
,'2018-05-23 09:46:45.547' CreatedOnDate
,1 LastModifiedByUserID
,'2018-05-23 09:46:45.547' LastModifiedOnDate
--,pbm.ModuleName
--,r.RoleName
--,pbp.PermissionKey
from
CleanDNN92Site.dbo.PersonaBarMenuPermission pbmp
join CleanDNN92Site.dbo.PersonaBarPermission Dpbp on Dpbp.PermissionId = pbmp.PermissionId
join CleanDNN92Site.dbo.PersonaBarMenu Dpbm on Dpbm.menuid = pbmp.menuid
join CleanDNN92Site.dbo.Roles Dr on Dr.RoleId = pbmp.RoleID
join BrokenDNNSite.dbo.PersonaBarPermission pbp on pbp.PermissionKey = Dpbp.PermissionKey
join BrokenDNNSite.dbo.PersonaBarMenu pbm on pbm.ModuleName = Dpbm.ModuleName
join BrokenDNNSite.dbo.Roles r on r.RoleName = Dr.RoleName
Except
--Intersect
Select
PortalId
,MenuId
,PermissionId
,AllowAccess
,RoleID
,UserId
,1 CreatedByUserId
,'2018-05-23 09:46:45.547' CreatedOnDate
,1 LastModifiedByUserID
,'2018-05-23 09:46:45.547' LastModifiedOnDate
From
BrokenDNNSite.dbo.PersonaBarMenuPermission