Forum Academy Marketplace Showcase Pricing Features

User who's not actually a user?

In my app (which is a database of grant proposals) I have Users, who actually log in and use the app, and “Authors” who are more of a historical object - as in “John Smith wrote this proposal.”

John Smith may be a User of the app, but he may also be an old staff member or someone else outside of the organization entirely (an Author, but not technically a User).

I’ve been told that I can have Users who never log in, but my understanding is that the email address field is required for Users. Often, we won’t have an email address for someone who’s just an Author, so using Users as Authors won’t work (I think?).

Because of this, I have two separate, but sometimes related, data types:

  • Users - actual people using the app, who have login credentials and various privacy settings
  • Authors - just a data type with just 3 fields: name (required), photo (not required), corresponding User (not required).

Here’s how Authors are currently created:

  • When a User is created, a corresponding Author is automatically created. So every User also is an Author.
  • When a Team (basically, my main account type for billing) is created, an “Unknown” Author is automatically created (in case the original author of a proposal is unknown).
  • When a User wants to attach a different Author (as in, not them) to a project, they either select from the Authors already in the system, or create new Author, which will not have a corresponding User.

I worry this will get really complicated and I’ll end up with redundant data or tons of backend workflows to keep things up to date. And what if an Author who isn’t a User needs to become a User? Just feels like there’s potential for a big ol’ mess and that there’s probably a simpler way to handle this.

Curious how others have done it (and if I’m wrong about the email address being a required field for Users).

2 Likes

I dealt with something similar, and I tried to do it the way you are proposing but I ran into the types of problems you are talking about. It gets complicated really quickly.

Here’s what I think you could do based on what I did that simplified things…

Create Author datatype with just name and photo.
Create Author field in User datatype, select Author datatype as the type of field, and check the box for a list.
Now each User will have a list of Authors from which to select from.

When the User signs up, the workflow creates an Author with their name and photo, and then adds that Author to the User’s list of Authors. (so they start with one…themselves)

As you have already done, allow the User to create a new Author, and have the workflow add this new author to the User’s list of Authors.

I wouldn’t be concerned that different Users will have the same Authors because it will only be duplicates/multiples in the general database of Authors, not in their unique list of Authors.

When you say, “what if an Author who isn’t a User needs to become a User?”, how does this User sign up? Is there an invite, or do they sign up on their own? Does someone in the app indicate who that author should be?

Thanks @robert!

I think I’ve done something similar to what you’re saying, but in my app there is a Team/Workspace structure, so it’s a little different…

A Team is a data type that has a list of Projects, a list of Authors, and a list of Users. So a User can #1) see anything connected to the Team(s)* they’re listed on, and #2) specify an Author on a Team’s Project from the list of Authors on that Team object.

*The use case here, if it’s helpful, is that a Team might be a nonprofit organization, and a User might be an employee at that org OR a freelance grant writer invited to the Team as a guest. That freelance grant writer could have their own account (Team), and be a guest on multiple other Teams (their clients).

So essentially I’m thinking of doing just what you’ve said, but instead of the User having a list of Authors, the User has just one Author (themselves), and the Team object has a list of Authors for that User to choose from when they’re assigning an Author to a Project.

Does that square with what you’re saying?

Either way, it still feels complicated, and could be simplified if I could just use Users instead of Authors… (no?)

1 Like

Yes, I think that’s it. And when the User creates a Team or joins a Team, the workflow would add that User’s Author (themselves) to the list of the Team’s Authors.

Do not do it with Users because when the real User wants to join, it will create a nightmare of validation.

Yes. Any User on a Team could invite an existing Author to become a User. Not exactly sure what the UI or the workflow setup would be for this, but I’m thinking they’d see a list of Authors, and next to each Author it would either have a link to their User profile (letting them know that person is already in the system as a User), or an “Invite” button which would invite the person and connect them to that Author once they’ve signed up.

The use case for this: A nonprofit org is a Team that writes proposals. They’ve previously hired a freelance grant writer to write some proposals for them. That grant writer would need to be listed as the Author on those proposals, but they might not want to invite them to the system - maybe they’re not working with them anymore, whatever. But down the road, they may want to invite that grant writer in as a User.

Ooooh I didn’t even think about this. Honestly not even sure what the nightmare would look like - would you mind sharing? (No worries if not - really appreciate your time already.)

When a user clicks on the “Invite this Author” you can create the User and add the User to the Author object. Depending on if you are going to allow one User to be in multiple workspaces or not, you can also add the Author to the User object.

You can also add an email field to the Author object, in the event that the User joins the workspace without an invite, and you can check to see if there is an Author with that email and link them then.

1 Like

Cool. This was my plan! I just tend to over-complicate things, so wanted to make sure there wasn’t a simpler way to do it. Thanks!

So if a User has been created by someone else for use as an Author, when the real person wants to sign up, how are you going to validate them?
You won’t be able to do it by email. And you won’t be able to do it by name either because people use different variations on their name. For example, if Bob Smith signs up, and he has already been created as Robert Smith, how is the system going to match them? It’s even harder to match when people change their names. Jane Smith was added 2 years ago by someone else. Now Jane joins as Jane Smith Jones (married name).
Now you have duplicate Users.
And even if you are able to match them, how do you validate them? If someone signs up pretending to be Robert Smith, and wants to claim the Robert Smith User as his own, how do you police this?
Finally, there are people with the same or very similar names that accidently claim someone else’s User.
These are the nightmares.

There are a couple of problems I see with this approach.
#1 - the “Invite this Author” approach assumes the inviting User knows the Author’s email address.
#2 - what happens if the invited Author doesn’t accept, but later signs up independently with a different email address? System won’t be able to match them.

At some point the author and user need to be linked up somehow, whether it’s by email or some other code, it doesn’t really matter so much. If you did have a work email, and that’s what they signed up as, you can automate this process, otherwise, you’d need some other way to match the two objects together.

In the first method, Invite this Author, I assumed there would be some kind of modal where you send the invite to, that would be the email the user is attached to and signs up with.

I wouldn’t suggest allowing for a public “workspace” where people can claim an author’s account, that doesn’t seem like an option.

My thinking - and I haven’t tried this out - is that when the current user clicks “Invite Author” it would send that Author’s record ID (not email address or name) in a URL parameter to a signup page, and when they sign up using that link, a step in the “create user” workflow would be to tie their new User record with the Author record indicated by the URL parameter. People signing up would never see a list of Authors they can choose from like “that’s me!” - it would be automated completely.

The inviting User would send the sign up link to the person’s email address, which they’d just enter manually. As it: 1) click “Invite Author” 2) enter their email address 3) the link is sent with the url parameter. I don’t see the need to keep email addresses in the Author data type since it’s totally possible their email address might be different by the time they’re invited. It would literally just include their name and the link to the User, if there is one. (There is the issue of two people with the same name, so gotta figure that out, but would probably be unlikely since org would probably have max 10 Authors - it wouldn’t be a long list.)

If they just sign up fresh without using that link, I could easily make a section of my Admin panel for linking Users and Authors. The issue then is that when a new User is created without a pre-linked Author, a new Author is also created. So I’d have to figure out some way to “merge” duplicate Authors. I don’t see this being really difficult, but maybe I’m not considering all the factors here…

Maybe I misunderstood this, but I thought you wouldn’t have their email addresses in many cases.

It’s a lot of extra work if it is just for a historical record. If the name is entered, and a User can search by that Author Name, then why does it need to be linked to a User. What is the use case or feature here? And if there is one, have you talked to actual prospective Users to see if it is a feature they really want?
Just because you can, doesn’t mean you should. This is coming from experience.

For old Authors, that’s correct (example: in 2015, Joe Shmo, who was a freelance grant writer we hired this one time, wrote a proposal we want to add to the system). Maybe we know his email address, but it doesn’t matter because he’s just an Author at this point.

But say we reconnected with Joe in real life and decided to hire him again, we’d then use his current email address to invite him into the system as a User.

Totally fair point.

The function of the app is to be able to filter old bits of language from past grant proposals, extract useful language, and then re-use it to build the first draft of a new proposal.

One of the primary filtering options is to see just language that I (as a User) or someone else (maybe a User, maybe not) wrote in the past.

Because of this, any new language added to the library would need to have an Author connected to it. Usually that would be the current User. So yes, I could just have a dropdown where the User selects their own Author name from a list, but I can imagine a user working in the system all day would get a little annoyed with the system not being smart enough to just select them automatically. Hence the attempt to tie the User to their corresponding Author record.

I’d rather NOT do it this way because I see it can easily create a mess (that’s why I initially posted this question, ha). I’d rather just have “inactive” User records for people who wrote stuff but won’t be using the system, and dump the Author thing altogether. But it seems like that’s not an option since you need an email address to create a User record (right?). If I have an email address it’s no problem, but if I don’t, what’s the option there? Just make one up?

I think there are some tutorials about how to create a user without an email address.
coachingnocodeapps.com has a tutorial on how to do this.

1 Like