Data Structure & Privacy Rules: Users as Members of Multiple Teams/Accounts

App Overview (for reference)

The app is meant for grant writers to manage proposal language they’re writing or have written in the past. If you’re really bored, here’s a quick-ish walkthrough: https://youtu.be/e1CaVRYlbaE?t=1674

There are three types of users:

  1. Freelance grant writer (single-member “team”) with lots of clients & client projects
  2. Grant writing agency (multi-member “team” + occasional contractors) with lots of non-profit clients & client projects
  3. Non-profit organization (multi-member “team” + occasional contractors) with a single client (themselves) & lots of projects.

Consequential data types are:

Organizations

  • Could be a “nonprofit” or a “funder” (set via a “type” option set)
  • Users can create these
  • In a freelance or grant writing agency account, there will be several nonprofit Orgs (these are their clients), but in a non-profit account the only nonprofit Org in the system will be itself. Both types of accounts would have multiple funders.
  • Privacy: Users should only see the Orgs tied to the team they’re a member of and are logged into at that moment.
  • The Organization data type is sort of the main one. Everything else falls under this data type in one way or another.

Grants

  • This is a funding opportunity published by a “funder” Org, which a “nonprofit” Org can write a proposal for.
  • Tied to a single “funder” Org
  • Tied to any “nonprofit” Orgs that is applying for the grant (could be > 1)
  • Users can create these
  • Privacy: Users should only see the Opportunities tied to Organizations tied to the team they’re a member of and are logged into at that moment.

Proposals

  • This is a “project” that includes a list of many Language Items
  • Tied to the corresponding Opportunity (there might be several Proposals for a single Grant)
  • Tied to the “nonprofit” Org that it’s being written for
  • Users can create these
  • Privacy: Users should only see the Proposals tied to Organizations tied to the team they’re a member of and are logged into at that moment.

Language Items

  • These are the chunks of language that make up a Proposal
  • Tied to the corresponding Proposal
  • Users can create these
  • Privacy: Users should only see the Proposals tied to Organizations tied to the team they’re a member of and are logged into at that moment.

Language Topics

  • These are essentially tags for Language Items (i.e. Mission, Program Description, Evaluation Methods, etc.)
  • This data type is pre-populated, but users should be allowed to add their own as well (that’s why I’ve made it a data type instead of an option set)
  • Privacy: Users should only see the pre-populated Topics and any that have been created by members of the account they’re logged into.