Summary
B1 has a Notes tab on person records (visible at admin.b1.church/people/:id) backed by the messaging/conversations API. Before importing notes from Planning Center Online (or allowing staff to add sensitive notes), the Notes tab needs role-based access control so confidential notes are only visible to authorized staff.
Background
We are migrating a church from PCO to B1. PCO has 33,868 notes across 17 categories that are fully accessible via the PCO API (GET /people/v2/notes). The B1 Notes tab is the right destination — the API path is clear (POST /messaging/conversations with contentType: "person", then POST /messaging/messages). However, we are holding the migration until proper permissions are in place.
The problem
PCO note categories include sensitive data that must not be visible to all staff:
| Category |
Sensitivity |
| Confidential Note |
🔴 Pastoral/admin only |
| Pastoral Care |
🔴 Pastoral only |
| Personal History |
🔴 Restricted |
| Giving Leader Notes |
🔴 Finance only |
| Prayer Requests (7 campus categories) |
🟡 Prayer team |
| General / Text In Church Activity |
🟢 General staff |
Current state: PersonNavigation.tsx renders the Notes tab with no permission check — any logged-in user who can access the People section sees all notes on any person record. The legacy PersonNav.tsx did have a gate (UserHelper.checkAccess(Permissions.membershipApi.people.edit)) but it was dropped when the nav component was rewritten.
Requested behavior
Option A (minimum viable): Restore the people.edit permission gate on the Notes tab in PersonNavigation.tsx so only staff with edit access to person records can see notes at all.
Option B (preferred): Add a visibility/permission level to individual notes or note categories — similar to PCO's note categories — so a "Confidential" note is only visible to users with a specific role (e.g. Pastoral Care role), while general notes remain visible to all staff with people access.
Notes on the PCO migration
- PCO API confirms all 33,868 notes are readable via
GET /people/v2/notes (the notes endpoint is accessible — no block)
- We plan to prefix each imported note with its PCO category (e.g.
[Pastoral Care] note text) so staff know the source
- We will not import notes until this permission feature is in place
- The
messaging scope will be needed on the B1 API key for the import script
References
B1App/src/people/PersonPage.tsx — handleCreateConversation, case "notes" render
B1App/src/people/components/PersonNavigation.tsx — active nav, no permission gate on Notes tab
B1App/src/people/components/PersonNav.tsx — legacy nav with people.edit gate (reference implementation)
Summary
B1 has a Notes tab on person records (visible at
admin.b1.church/people/:id) backed by the messaging/conversations API. Before importing notes from Planning Center Online (or allowing staff to add sensitive notes), the Notes tab needs role-based access control so confidential notes are only visible to authorized staff.Background
We are migrating a church from PCO to B1. PCO has 33,868 notes across 17 categories that are fully accessible via the PCO API (
GET /people/v2/notes). The B1 Notes tab is the right destination — the API path is clear (POST /messaging/conversationswithcontentType: "person", thenPOST /messaging/messages). However, we are holding the migration until proper permissions are in place.The problem
PCO note categories include sensitive data that must not be visible to all staff:
Current state:
PersonNavigation.tsxrenders the Notes tab with no permission check — any logged-in user who can access the People section sees all notes on any person record. The legacyPersonNav.tsxdid have a gate (UserHelper.checkAccess(Permissions.membershipApi.people.edit)) but it was dropped when the nav component was rewritten.Requested behavior
Option A (minimum viable): Restore the
people.editpermission gate on the Notes tab inPersonNavigation.tsxso only staff with edit access to person records can see notes at all.Option B (preferred): Add a visibility/permission level to individual notes or note categories — similar to PCO's note categories — so a "Confidential" note is only visible to users with a specific role (e.g. Pastoral Care role), while general notes remain visible to all staff with people access.
Notes on the PCO migration
GET /people/v2/notes(the notes endpoint is accessible — no block)[Pastoral Care] note text) so staff know the sourcemessagingscope will be needed on the B1 API key for the import scriptReferences
B1App/src/people/PersonPage.tsx—handleCreateConversation,case "notes"renderB1App/src/people/components/PersonNavigation.tsx— active nav, no permission gate on Notes tabB1App/src/people/components/PersonNav.tsx— legacy nav withpeople.editgate (reference implementation)