Skip to content

Feature Request: Role-based note permissions on person records (Notes tab) #954

Description

@mbyrdLCS

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.tsxhandleCreateConversation, 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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions